From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeremy Fitzhardinge Subject: Re: [RFC, PATCH 2/5] Paravirt_ops patch bugs.patch Date: Thu, 19 Apr 2007 21:39:34 -0700 Message-ID: <46284406.2080007@goop.org> References: <20070420015234.5D42EBFC@zach-dev2.vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20070420015234.5D42EBFC@zach-dev2.vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Zachary Amsden Cc: Andrew Morton , Petr Vandrovec , Chaz Masden , Virtualization Mailing List , Chris Wright , Andi Kleen , Ingo Molnar List-Id: virtualization@lists.linuxfoundation.org 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. J