weiming
2008-Mar-11 17:13 UTC
[Xen-devel] Is it possible to make hypercall from user application directly?
Hi, I implemented my own Hypercall in xen. Now I wish my application under dom0 could talk to Xen via my hypercall. Currently, I make a stub in dom0''s kernel, which works as a proxy to forward the request. So, my application first makes a system call to dom0, which then makes hypercall to xen. Is this design necessary? May I call hypercalls from user application under dom0 directly? Thanks, Weiming _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Daniel Stodden
2008-Mar-11 19:50 UTC
Re: [Xen-devel] Is it possible to make hypercall from user application directly?
On Tue, 2008-03-11 at 12:13 -0500, weiming wrote:> Hi, > > I implemented my own Hypercall in xen. > > Now I wish my application under dom0 could talk to Xen via my > hypercall. > Currently, I make a stub in dom0''s kernel, which works as a proxy to > forward the request. So, my application first makes a system call to > dom0, which then makes hypercall to xen. > > Is this design necessary? May I call hypercalls from user application > under dom0 directly?No, not directly (didn''t we have that syscall conversation recently? ;). But for dom0-only privileged operations there''s /proc/xen/privcmd to rule them all. See e.g. do_xen_hypercall() in tools/libxc/. regards, Daniel -- Daniel Stodden LRR - Lehrstuhl für Rechnertechnik und Rechnerorganisation Institut für Informatik der TU München D-85748 Garching http://www.lrr.in.tum.de/~stodden mailto:stodden@cs.tum.edu PGP Fingerprint: F5A4 1575 4C56 E26A 0B33 3D80 457E 82AE B0D8 735B _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
weiming
2008-Mar-12 02:42 UTC
Re: [Xen-devel] Is it possible to make hypercall from user application directly?
After some study, I got the following understanding. Please correct me if I''m wrong; otherwise, you can just say "correct". 1. In x86_64 mode, xen sets the LSTAR (the EIP of syscall target), and this value keeps constant. This value is code of "syscall_enter" defined in xen/arch/x86/x86_64/entry.S 2. In ENTRY(syscall_enter) ... ... testb $TF_kernel_mode, VCPU_thread_flag(%rbx) jz switch_to_kernel /*hypercall*/ ... so whenever a syscall is issued, "syscall_enter" checks the context. If it decides that the context is "kernel mode", it will treat the syscall as a plain "system call" from user applications. So it goes to "jz switch_to_kernel". Otherwise, it will think it''s a hypercall issued from guest domains. 3. So an application can''t make "hypercalls" directly because it''s context is "kernel mode", so it will always be treated as a system call to the guest OS. Am I right? Thanks, Weiming On Tue, Mar 11, 2008 at 2:50 PM, Daniel Stodden <stodden@cs.tum.edu> wrote:> On Tue, 2008-03-11 at 12:13 -0500, weiming wrote: > > Hi, > > > > I implemented my own Hypercall in xen. > > > > Now I wish my application under dom0 could talk to Xen via my > > hypercall. > > Currently, I make a stub in dom0''s kernel, which works as a proxy to > > forward the request. So, my application first makes a system call to > > dom0, which then makes hypercall to xen. > > > > Is this design necessary? May I call hypercalls from user application > > under dom0 directly? > > No, not directly (didn''t we have that syscall conversation recently? ;). > > But for dom0-only privileged operations there''s /proc/xen/privcmd to > rule them all. See e.g. do_xen_hypercall() in tools/libxc/. > > regards, > Daniel > > -- > Daniel Stodden > LRR - Lehrstuhl für Rechnertechnik und Rechnerorganisation > Institut für Informatik der TU München D-85748 Garching > http://www.lrr.in.tum.de/~stodden <http://www.lrr.in.tum.de/%7Estodden> > mailto:stodden@cs.tum.edu > PGP Fingerprint: F5A4 1575 4C56 E26A 0B33 3D80 457E 82AE B0D8 735B > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Daniel Stodden
2008-Mar-12 09:16 UTC
Re: [Xen-devel] Is it possible to make hypercall from user application directly?
On Tue, 2008-03-11 at 21:42 -0500, weiming wrote:> After some study, I got the following understanding. Please correct me > if I''m wrong; otherwise, you can just say "correct". > > 1. In x86_64 mode, xen sets the LSTAR (the EIP of syscall target), and > this value keeps constant. This value is code of "syscall_enter" > defined in xen/arch/x86/x86_64/entry.Scorrect.> 2. > In ENTRY(syscall_enter) > ... > ... > testb $TF_kernel_mode, VCPU_thread_flag(%rbx) > jz switch_to_kernel > > /*hypercall*/ > ... > > so whenever a syscall is issued, "syscall_enter" checks the context. > If it decides that the context is "kernel mode", it will treat the > syscall as a plain "system call" from user applications. So it goes > to "jz switch_to_kernel". Otherwise, it will think it''s a hypercall > issued from guest domains.correct. PT switching is then done in create_bounce_frame/toggle_guest_mode.> 3. So an application can''t make "hypercalls" directly because it''s > context is "kernel mode", so it will always be treated as a system > call to the guest OS.believe you mean "user mode", but otherwise correct. best, daniel -- Daniel Stodden LRR - Lehrstuhl für Rechnertechnik und Rechnerorganisation Institut für Informatik der TU München D-85748 Garching http://www.lrr.in.tum.de/~stodden mailto:stodden@cs.tum.edu PGP Fingerprint: F5A4 1575 4C56 E26A 0B33 3D80 457E 82AE B0D8 735B _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel