Re: [RFC, PATCH 2/5] Paravirt_ops patch bugs.patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeremy Fitzhardinge wrote:
Zachary Amsden wrote:
Failing to patch because not enough space is available for a call or jump
or because the site clobbers do not allow the target clobbers to fit is
a fatal error; it means the kernel can not be properly virtualized.

No, that doesn't follow.  If the original site was:

patchable_start:
    push %eax
    push %ecx
    push %edx
    call *paravirt_ops + thingy
    pop
    pop
    pop
patchable_end:

then its perfectly OK to leave it as-is, even if the direct call's
destination clobbers are mismatched.  If the patcher wants to generate a
call to a C function in a context which can't deal with normal C calling
conventions, then it needs to also patch in appropriate save/restores.

The example is a bit misconstrued. In this case, the clobbers for the patchable region are CLBR_ALL - so there is no possibility of mismatch because of expanded clobber list. If the patchable region consisted of this, it would be bad:

   push %eax
   push %ecx
patchable_start:
   push %edx
   call *paravirt_ops + thingy
   pop
patchable_end: (note - site clobber EDX ok)
   pop
   pop


But, why would you do that?

Calls through paravirt_ops function pointers are C function calls.  Failing to provide a patchable region which can make a C function call is a BUG().

Zach

_______________________________________________
Virtualization mailing list
Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/virtualization

[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux