jintack

VMswitch changes on linux

Nov 12th, 2015
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. diff --git a/kernel/virt_test.c b/kernel/virt_test.c
  2. index 7d52be1..10bc60a 100644
  3. --- a/kernel/virt_test.c
  4. +++ b/kernel/virt_test.c
  5. @@ -81,7 +81,7 @@ u64 inline call_hyp(void *hypfn)
  6. unsigned long b, c, d;
  7. asm volatile ("vmcall" : "+hypfn"(hypfn), "=b"(b), "=c"(c), "=d"(d));
  8. /* This is a hyp call for Xen */
  9. - /* _hypercall0(int, dummy_hyp); */
  10. + /* _hypercall2(long, dummy_hyp, 0, 0); */
  11. #endif
  12. }
  13.  
  14. @@ -394,6 +394,8 @@ static unsigned long vmswitch_send_test(void)
  15. #if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
  16. ret = kvm_call_hyp((void*)HVC_VMSWITCH_SEND, cc_before);
  17. #elif defined(CONFIG_X86_64)
  18. + /* This is for Xen */
  19. + ret = _hypercall2(long, dummy_hyp, HVC_VMSWITCH_SEND, cc_before);
  20. #endif
  21. if (ret)
  22. kvm_err("Sending HVC VM switch measure error: %lu\n", ret);
  23. @@ -408,14 +410,29 @@ static unsigned long vmswitch_recv_test(void)
  24. {
  25. unsigned long ret, cc_before, cc_after;
  26. unsigned long flags;
  27. + unsigned long num;
  28.  
  29. local_irq_save(flags);
  30. #if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
  31. cc_before = call_hyp((void*)HVC_VMSWITCH_RCV);
  32. #elif defined(CONFIG_X86_64)
  33. +
  34. + /* This assumes that this code runs on Xen HVM */
  35. +
  36. + num = HVC_VMSWITCH_RCV;
  37. + asm volatile ( "mov %[num], %%rax\n\t"
  38. + "vmcall\n\t"
  39. + "mov %%rdx, %[cc_before]\n\t"
  40. + : [cc_before] "=r" (cc_before)
  41. + : [num] "r" (num)
  42. + : "%rax", "%rdx");
  43. #endif
  44. cc_after = read_cc_after();
  45. +#if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
  46. call_hyp((void*)HVC_VMSWITCH_DONE);
  47. +#elif defined(CONFIG_X86_64)
  48. + _hypercall2(long, dummy_hyp, HVC_VMSWITCH_DONE, 0);
  49. +#endif
  50. local_irq_restore(flags);
  51. ret = CYCLE_COUNT(cc_before, cc_after);
Advertisement
Add Comment
Please, Sign In to add comment