From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Andi Kleen <ak@suse.de>
Cc: virtualization@lists.linux-foundation.org, jbeulich@novell.com,
Andi Kleen <ak@muc.de>,
xen-devel@lists.xensource.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, David Miller <davem@davemloft.net>,
chrisw@sous-sol.org, virtualization@lists.osdl.org,
anthony@codemonkey.ws, akpm@linux-foundation.org,
torvalds@linux-foundation.org, mingo@elte.hu
Subject: Re: [patch 13/26] Xen-paravirt_ops: Consistently wrap paravirt ops callsites to make them patchable
Date: Mon, 19 Mar 2007 10:58:29 -0700 [thread overview]
Message-ID: <45FECF45.7010705@goop.org> (raw)
In-Reply-To: <200703191157.29780.ak@suse.de>
Andi Kleen wrote:
>>
>> push %eax
>> push %ecx
>> push %edx
>> call paravirt_cli
>> pop %edx
>> pop %ecx
>> pop %eax
>>
>
> This cannot right now be expressed as inline assembly in the unwinder at all
> because there is no way to inject the push/pops into the compiler generated
> ehframe tables.
>
I was thinking more of entry.S rather than inline asms. The only ones I
can think of which would be relevant are the interrupt operations in
spinlocks, and even then we get a bit more leeway.
> gcc normally doesn't generate push/pops around directly around the
> call site, but somewhere else due to the way its register allocator works.
> It can be anywhere in the function or even not there at all if the register
> didn't contain anything useful. And they're not necessarily push/pops of
> course.
>
Right, I'm not making any assumptions about what gcc generates for
calls, other than assuming it uses a standard "call X" direct call
instruction.
> So you would need to write it as inline assembly. I'm not sure it would
> be significantly cleaner than just having tables then.
>
No, my intention is that the vast majority of pv_ops uses, which are
calls from C code, would simply be normal C calls, syntatically and
semantically.
> It's unlikely you can do much useful in 5 bytes I guess.
>
I think the main value is retaining non-PARAVIRT native performance
levels. In the native case, the inlined instructions amount to 1 or 2
bytes, and having small patch sites is an advantage because there's less
space wasted on nops. My understanding is that a direct call has almost
zero overhead on modern processors, because both the call and the return
can be completely predicted and prefetched, so the threshhold at which
you make inline vs call tradeoff is pretty small.
> Regarding cli/sti: i've been actually thinking about changing it in the
> non paravirt kernel. IIRC most save_flags/restore_flags are inside
> spin_lock_irqsave/restore() and that is a separate function anyways
> so a little larger special case code is ok as long as it is not slower.
> There is some evidence that at least on P4 a software cli/sti flag without
> pushf/popf would be faster.
>
There are also the ones in entry.S. I suppose spinlocks do get used
more than syscalls and interrupts.
J
next prev parent reply other threads:[~2007-03-19 17:58 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20070301232443.195603797@goop.org>
2007-03-01 23:25 ` [patch 26/26] Xen-paravirt_ops: Add the Xen virtual network device driver Jeremy Fitzhardinge
2007-03-02 0:42 ` Stephen Hemminger
2007-03-02 0:56 ` Jeremy Fitzhardinge
2007-03-02 1:30 ` [RFC] Arp announce (for Xen) Stephen Hemminger
2007-03-02 8:09 ` Pekka Savola
2007-03-02 18:29 ` Ben Greear
2007-03-02 19:59 ` Stephen Hemminger
2007-03-02 8:46 ` Keir Fraser
2007-03-02 12:54 ` Andi Kleen
2007-03-02 14:08 ` jamal
2007-03-02 18:08 ` Chris Wright
2007-03-06 4:35 ` David Miller
2007-03-06 18:51 ` [RFC] ARP notify option Stephen Hemminger
2007-03-06 19:04 ` Jeremy Fitzhardinge
2007-03-06 19:07 ` Chris Wright
2007-03-06 21:18 ` Chris Friesen
2007-03-06 22:52 ` Stephen Hemminger
2007-03-07 6:42 ` Pekka Savola
2007-03-07 17:00 ` Stephen Hemminger
2007-03-02 1:21 ` [patch 26/26] Xen-paravirt_ops: Add the Xen virtual network device driver Christoph Hellwig
2007-03-02 1:26 ` Chris Wright
[not found] ` <20070301232527.956565107@goop.org>
[not found] ` <20070316092445.GM23174@elte.hu>
[not found] ` <20070316.023331.59468179.davem@davemloft.net>
2007-03-16 20:38 ` [patch 13/26] Xen-paravirt_ops: Consistently wrap paravirt ops callsites to make them patchable Jeremy Fitzhardinge
2007-03-17 10:33 ` Rusty Russell
2007-03-18 7:33 ` David Miller
2007-03-18 7:59 ` Jeremy Fitzhardinge
2007-03-18 12:08 ` Andi Kleen
2007-03-18 15:58 ` Jeremy Fitzhardinge
2007-03-18 17:04 ` Andi Kleen
2007-03-18 17:29 ` Jeremy Fitzhardinge
2007-03-18 19:30 ` Andi Kleen
2007-03-18 23:46 ` Jeremy Fitzhardinge
2007-03-19 10:57 ` Andi Kleen
2007-03-19 17:58 ` Jeremy Fitzhardinge [this message]
2007-03-19 19:08 ` David Miller
2007-03-19 20:59 ` Andi Kleen
2007-03-20 3:18 ` Linus Torvalds
2007-03-20 3:47 ` David Miller
2007-03-20 4:19 ` Eric W. Biederman
2007-03-20 13:28 ` Andi Kleen
2007-03-20 16:25 ` Eric W. Biederman
2007-03-20 17:42 ` Andi Kleen
2007-03-20 16:52 ` Linus Torvalds
2007-03-20 18:03 ` Andi Kleen
2007-03-20 17:27 ` Linus Torvalds
2007-03-20 19:21 ` Andi Kleen
2007-03-20 18:49 ` Linus Torvalds
2007-03-20 20:23 ` Andi Kleen
2007-03-20 21:39 ` Alan Cox
2007-03-20 21:49 ` [Xen-devel] " Andi Kleen
2007-03-20 23:51 ` Linus Torvalds
2007-03-20 23:43 ` Linus Torvalds
2007-03-21 6:08 ` Andrew Morton
2007-03-20 16:12 ` Chuck Ebbert
2007-03-20 1:23 ` Zachary Amsden
2007-03-20 1:45 ` Jeremy Fitzhardinge
2007-03-19 2:47 ` Rusty Russell
2007-03-19 18:25 ` Eric W. Biederman
2007-03-19 18:38 ` Linus Torvalds
2007-03-19 18:44 ` Linus Torvalds
2007-03-19 19:33 ` Jeremy Fitzhardinge
2007-03-20 0:01 ` Rusty Russell
2007-03-20 2:00 ` Zachary Amsden
2007-03-20 4:20 ` Rusty Russell
2007-03-20 5:54 ` Jeremy Fitzhardinge
2007-03-20 11:33 ` Andreas Kleen
2007-03-20 15:09 ` Linus Torvalds
2007-03-20 15:58 ` Eric W. Biederman
2007-03-20 16:06 ` Linus Torvalds
2007-03-20 16:31 ` Jeremy Fitzhardinge
2007-03-20 22:09 ` Zachary Amsden
2007-03-21 0:24 ` Linus Torvalds
2007-03-21 2:53 ` Zachary Amsden
2007-03-21 2:15 ` Linus Torvalds
2007-03-21 3:43 ` Zachary Amsden
2007-03-20 22:43 ` Matt Mackall
2007-03-20 23:08 ` Zachary Amsden
2007-03-20 23:33 ` Jeremy Fitzhardinge
2007-03-21 1:14 ` Zachary Amsden
2007-03-20 23:41 ` Matt Mackall
2007-03-21 0:20 ` Jeremy Fitzhardinge
2007-03-20 19:28 ` Andi Kleen
2007-03-20 19:54 ` Zachary Amsden
2007-03-20 20:02 ` Andi Kleen
2007-03-20 16:26 ` Jeremy Fitzhardinge
2007-03-20 22:41 ` Rusty Russell
2007-03-20 17:00 ` Ingo Molnar
2007-03-21 0:03 ` Paul Mackerras
2007-04-12 23:16 ` David Miller
2007-03-19 18:41 ` Chris Wright
2007-03-19 19:10 ` Jeremy Fitzhardinge
2007-03-19 19:46 ` David Miller
2007-03-19 20:06 ` Jeremy Fitzhardinge
2007-03-19 23:42 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45FECF45.7010705@goop.org \
--to=jeremy@goop.org \
--cc=ak@muc.de \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=anthony@codemonkey.ws \
--cc=chrisw@sous-sol.org \
--cc=davem@davemloft.net \
--cc=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=netdev@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=virtualization@lists.osdl.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).