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
|