From: Zachary Amsden <zach@vmware.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Petr Vandrovec <petr@vmware.com>,
nigel@nigel.suspend2.net, Arjan van de Ven <arjan@infradead.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: VMware, x86_64 and 2.6.21.
Date: Fri, 04 May 2007 08:08:12 -0700 [thread overview]
Message-ID: <463B4C5C.1000507@vmware.com> (raw)
In-Reply-To: <m1slacu88z.fsf@ebiederm.dsl.xmission.com>
Eric W. Biederman wrote:
> I don't even want to think about how a kernel module gets far enough
> into the kernel to be affected by our vector layout. These are internal
> implementation details, without anything exported to modules.
>
> Can I please see the source of the code in vmware that is doing this?
>
Sorry, that code is not part of the kernel or any kernel module. It is
part of a fixed set of assumptions about the platform coded in the
hypervisor, which is not open source. This code runs completely outside
the scope of Linux, and uses a platform dependent set of IDT software
vectors which are known not to collide with IDT IRQ vectors. We use
these software vectors for internal purposes; they are never visible to
any Linux software, but are handled and trapped by the hypervisor.
Nevertheless, since we must distinguish between software IRQs and
hardware IRQs, we must find vectors that do not collide with the set of
hardware IRQs or processor exceptions.
To avoid this dependence on fixed assumtions about vector layout, what
is needed is a mechanism to reserve and allocate software IDT vectors.
It may be a GPL'd interface; it certainly is interfacing with the kernel
at a low-level.
An interface that would likely looking something like:
int idt_allocate_swirq(int best_irq);
void idt_release_swirq(int irq);
int __init idt_reserve_irqs(int count);
void idt_set_swirq_handler (int irq, int is_user, void (*handle)(struct
pt_regs *regs, unsigned long error_code));
EXPORT_SYMBOL_GPL(idt_allocate_swirq);
EXPORT_SYMBOL_GPL(idt_release_swirq);
EXPORT_SYMBOL_GPL(idt_set_swirq_handler);
Now you can set aside a fixed number of IRQs to be used for software
IRQs at boot time, and allocate them as required. You can even create
software IRQs which can be handled by userspace applications, or reserve
software IRQs for other uses - from within the kernel itself, or from
outside any kernel context (for example an IPI invoked from a non-kernel
CPU). There are cases where this would be a useful feature for us;
being able to issue IPIs directly to a hypervisor mode CPU would be a
significant speedup (alternatively, having a kernel module handle the
IPI when the CPU is in kernel mode and schedule the vmx process to run
and forward the IPI).
The thought of running non-kernel code in ring-0 on some CPU is scary,
certainly. Nevertheless it is required for running a hypervisor which
does not live in the kernel address space and must handle its own page
faults and other exceptions.
Zach
next prev parent reply other threads:[~2007-05-04 15:10 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-01 5:42 VMware, x86_64 and 2.6.21 Nigel Cunningham
2007-05-01 6:13 ` Jeff Chua
2007-05-01 6:33 ` Nigel Cunningham
2007-05-01 11:09 ` Jan Engelhardt
2007-05-01 12:51 ` Jeff Chua
2007-05-01 7:24 ` Michael Gerdau
2007-05-01 7:36 ` Nigel Cunningham
2007-05-01 11:10 ` Jan Engelhardt
2007-05-01 11:54 ` Nigel Cunningham
2007-05-01 13:46 ` Mark Lord
2007-05-01 15:09 ` Nigel Cunningham
2007-05-01 14:57 ` Arjan van de Ven
2007-05-01 15:14 ` Nigel Cunningham
2007-05-02 9:30 ` Petr Vandrovec
2007-05-04 11:40 ` Eric W. Biederman
2007-05-04 15:08 ` Zachary Amsden [this message]
2007-05-04 20:14 ` Eric W. Biederman
2007-05-04 21:04 ` Zachary Amsden
2007-05-05 9:56 ` Christoph Hellwig
2007-05-05 18:06 ` John Anthony Kazos Jr.
2007-05-06 7:16 ` Valdis.Kletnieks
2007-05-06 11:08 ` Christoph Hellwig
-- strict thread matches above, loose matches on Subject: below --
2007-05-01 6:50 Marcos Pinto
2007-05-01 7:06 ` Nigel Cunningham
2007-05-01 22:38 ` Zachary Amsden
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=463B4C5C.1000507@vmware.com \
--to=zach@vmware.com \
--cc=arjan@infradead.org \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nigel@nigel.suspend2.net \
--cc=petr@vmware.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).