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

Re: [Xen-devel] New Hypercall Declaration


  • To: Dan Magenheimer <dan.magenheimer@xxxxxxxxxx>, "Nimgaonkar, Satyajeet" <SatyajeetNimgaonkar@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: Keir Fraser <keir@xxxxxxx>
  • Date: Thu, 07 Oct 2010 20:11:14 +0100
  • Cc:
  • Delivery-date: Thu, 07 Oct 2010 12:12:14 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:user-agent:date:subject:from:to:message-id:thread-topic :thread-index:in-reply-to:mime-version:content-type :content-transfer-encoding; b=mIR5tPf3104epj98wrizRD9rSOqV8Lz7k2zMr+5fgNFmBalh0EgbBdaoCkXoJhqi4B X0BOKcA656qsbrvq82Le1b0L5Yl4iEJWIrxk1twI/1ztxwYxqqmLzMh3oRuEbkFa0cTm a2Bn+ui88A5Tw7nN1RhmT5wx0eXdfOn63iYVM=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: ActmU2j+a/+fzAnI5kaxqmYwDRnhRA==
  • Thread-topic: [Xen-devel] New Hypercall Declaration

And furthermore, do_jeet() needs to return a long, not void.

 -- Keir

On 07/10/2010 19:07, "Dan Magenheimer" <dan.magenheimer@xxxxxxxxxx> wrote:

> The hypercall_table and hypercall_args_table are initialized sequences of
> quads and bytes.  Even though you have put 56 in the comment, you are
> initializing the table entry immediately following the 48th entry, which would
> be hypercall 49.  You need to fill the entries from 49 to 55 in both tables
> with the appropriate values.  (The assembler syntax for these tables is weird,
> e.g. endr and rept, and I am not an expert on it.)
>  
> 
> From: Nimgaonkar, Satyajeet [mailto:SatyajeetNimgaonkar@xxxxxxxxxx]
> Sent: Thursday, October 07, 2010 11:37 AM
> To: Dan Magenheimer; xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: RE: [Xen-devel] New Hypercall Declaration
>  
> 
> Hi Dan,
>            I followed your instruction from the below email, but still I am
> getting -1 for hypercall invocation. These are the steps I followed.
> 
> 1. Add my hypercall in xen.h  ----  #define __HYPERVISOR_jeet1
> 56
> 
> 2. Added it to entry.S - hypercall table ---- .quad do_mca               /* 48
> */
>                                                                    .quad
> do_jeet1               /* 56 */
>                                  - hypercall_args_table ---- .byte 1 /* do_mca
> */  /* 48 */
>                  
> .byte 0 /* do_jeet1            */  /* 56 */
> 
> 3. Then declared my hypercall in asm-x86/hypercall.h ---- void do_jeet1(void);
> 
> 4. Then calling it in domctl.c in xen/common --- void do_jeet1(void){
>     
>    printk ("Successfull Hypercall made to __HYPERVISOR_jeet1");
>    
> }
> 
> 5. Declared a function in xc_domain.c in xen/tools to call this hypercall
> 
>    int hypercall_test(int handle){
>     
>     int rc;
>     int arg=0; 
>     //int cmd=1;
>     //
>     //int test;
>     /* Hypercall definitions */
>      
>     DECLARE_HYPERCALL;
>     hypercall.op     = __HYPERVISOR_jeet1;
>     rc = do_xen_hypercall(handle, &hypercall);
>     hypercall.arg[0] = 0;
>     hypercall.arg[1] = (unsigned long)&arg;
>     //printf ("Hypercall Details: %d\n", rc);
>     //xc_interface_close(handle);
>     return rc;
> }
> 
> 6. Then wrote a userlevel program to call function hypercall_test and invoke
> my hypercall.
> 
>     #include <xenctrl.h>
> #include <stdio.h>
> 
> 
> 
> int main(){
>          
>      printf("Attempt to invoke the hypercall: __HYPERVISOR_jeet1\n");
>      int handle, rc;
>      
>          /* Acquire Hypervisor Interface Handle.
>             This handle goes as the first argument for the function
> do_xen_hypercall()
>          */
>          
>      handle = xc_interface_open();
>      printf ("Acquired handle to Xen Hypervisor:%d\n",handle);
>      
>      
>      rc = hypercall_test(handle);
>      printf ("Hypercall Details: %d\n", rc);
>      
>      xc_interface_close(handle);
>      printf ("Hypervisor handle closed\n");
>      
>      return 0;
>      
> }
> 
> 
> I compiled entire xen, installed it and booted into the atest compiled xen.
> But still my userlevel program compiles error free but returns me a -1 error
> for hypercall invocation. Can you please tell me what is that I doing wrong.
> Thanks.
> 
> Regards,
> Satyajeet Nimgaonkar
> 
> 
> From: Dan Magenheimer [dan.magenheimer@xxxxxxxxxx]
> Sent: Thursday, September 30, 2010 4:47 PM
> To: Nimgaonkar, Satyajeet; xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: RE: [Xen-devel] New Hypercall Declaration
> 
> Do you understand that you must also change the hypervisor to recognize and do
> something with your new hypercall?  Your userland code may actually be working
> and the hypercall may actually be resulting in an entry into the hypervisor,
> but unless the hypervisor is modified to recognize the new hypercall (#56) and
> do something with it, the hypervisor will generate a return value of -1
> (essentially saying ³I don¹t recognize this hypercall number²).
>  
> If you have modified the hypervisor, please share that patch.  If not, you
> will need to modify at least  the hypercall_table and the hypercall_args_table
> in entry.S (under x86, x86_64, and x86_64/compat, or all three, depending on
> the bit-ness of your hypervisor and guest) and create a do_my_hypercall()
> routine somewhere.  Then of course you will need to ensure that you are
> properly building, installing, and booting your newly modified hypervisor.
>  
> Printk¹s done inside the hypervisor can be viewed using ³xm dmesg² or via a
> properly configured serial port.
>  
> Use ³xm info² and look at cc_compile_date to ensure you are booting your newly
> modified hypervisor.
>  
> Hope that helps,
> Dan
>  
> 
> From: Nimgaonkar, Satyajeet [mailto:SatyajeetNimgaonkar@xxxxxxxxxx]
> Sent: Thursday, September 30, 2010 4:03 PM
> To: xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: [Xen-devel] New Hypercall Declaration
>  
> 
> Hello Xen Developers,
> 
>  I am currently working on declaring a new hypercall in Xen.
> For this i have declared my hypercall in xen.h -
> #define __HYPERVISOR_jeet1               56
> 
> Then I modified the xcom_privcmd.c to accomodate my hypercall -
>          case __HYPERVISOR_jeet1:
>                 printk("Successfull Hypercall made to
> __HYPERVISOR_jeet1");
> 
> I defined the structure for the Hypercall in xc_domain.c
> 
> int hypercall_test(int handle){
>     
>     int rc; 
>      
>     /* Hypercall definitions */
>      
>     DECLARE_HYPERCALL;
>     hypercall.op     = __HYPERVISOR_jeet1;
>     rc = do_xen_hypercall(handle, &hypercall);
>     hypercall.arg[0] = 0;
>     hypercall.arg[1] = 1;
>     //printf ("Hypercall Details: %d\n", rc);
>     //xc_interface_close(handle);
>     return rc; 
> }
> 
> And then I am calling this Hypercall through an user level program-
>   
> #include <xenctrl.h>
> #include <stdio.h>
> 
> 
> 
> int main(){
>          
>      printf("Attempt to invoke the hypercall: __HYPERVISOR_jeet1\n");
>      int handle, rc;
>      
>          /* Acquire Hypervisor Interface Handle.
>             This handle goes as the first argument for the function
> do_xen_hypercall()
>          */
>          
>      handle = xc_interface_open();
>      printf ("Acquired handle to Xen Hypervisor:%d\n",handle);
>      
>      
>      rc = hypercall_test(handle);
>      printf ("Hypercall Details: %d\n", rc);
>      
>      xc_interface_close(handle);
>      
>      return 0;
>      
> }
> 
> 
> The program compiles properly but gives me -1 error for rc. I have posted the
> same query and I got replies on it. But even after trying many things, I am
> still stuck with this problem. Can anyone please tell me what I am doing wrong
> here. Also please tell me where
> should I view the output of printk in xen.
> 
> Thanks in advance.
> 
> Regards,
> Satyajeet Nimgaonkar
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.