WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

RE: [Xen-devel] New Hypercall Declaration

To: Dan Magenheimer <dan.magenheimer@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: RE: [Xen-devel] New Hypercall Declaration
From: "Nimgaonkar, Satyajeet" <SatyajeetNimgaonkar@xxxxxxxxxx>
Date: Thu, 7 Oct 2010 17:36:33 +0000
Accept-language: en-US
Cc:
Delivery-date: Thu, 07 Oct 2010 10:37:33 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <f7713e49-ccd1-4a39-afef-1a84cb582c86@default>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <12871952FC0E29439F861FA745BCDD8503EB081A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>, <f7713e49-ccd1-4a39-afef-1a84cb582c86@default>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AQHLYPGTpGpb9qSnO0+wjzkK2C3bVZM1xv0P
Thread-topic: [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
<Prev in Thread] Current Thread [Next in Thread>