im setting up my hypervisor callback with: hypervisor_set_callbacks(CS_SELECTOR, (unsigned long)hypervisor_callback, CS_SELECTOR, (unsigned long)failsafe_callback); hypervisor_callback and failsafe_callback are as yet very simple assembly funcations that just shutdown the domain. <SNIP> _hypervisor_callback: call _hypervisor_shutdown ret _failsafe_callback: call _hypervisor_shutdown ret </SNIP> Im trying to test it with: <SNIP> _xen_cb_test: call _hypervisor_save_kernel_stack mov esi, _hypervisor_shared_info mov 1(esi), 0 push 0 push __HYPERVISOR_xen_version call _xen_op add esp, 4*2 ret </SNIP> The callback doesn''t seem to be getting called at all. At the moment im only trying to get very basic callback stuff working, so i''ve left out the save and iret stuff. Could anyone point out where im going wrong? Regards Ivan Kelly _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Simon Kagstrom
2006-Feb-15 12:33 UTC
Re: [Xen-devel] Setting up hypervisor_callback and testing
At Wed, 15 Feb 2006 11:49:05 +0000, Ivan Kelly wrote:> > im setting up my hypervisor callback with: > hypervisor_set_callbacks(CS_SELECTOR, (unsigned long)hypervisor_callback, > CS_SELECTOR, (unsigned long)failsafe_callback); > hypervisor_callback and failsafe_callback are as yet very simple assembly > funcations that just shutdown the domain. > <SNIP> > _hypervisor_callback: > [...] > </SNIP> > > The callback doesn''t seem to be getting called at all. At the moment im only > trying to get very basic callback stuff working, so i''ve left out the save and > iret stuff. Could anyone point out where im going wrong?Have you enabled event delivery? Look in the Mini-OS source kernel.c and os.h, where "__sti" is defined: #define __sti() \ do { \ vcpu_info_t *_vcpu; \ barrier(); \ _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ _vcpu->evtchn_upcall_mask = 0; \ barrier(); /* unmask then check (avoid races) */ \ if ( unlikely(_vcpu->evtchn_upcall_pending) ) \ force_evtchn_callback(); \ } while (0) the events should be masked on startup I think, so maybe that''s your problem. // Simon _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ivan Kelly
2006-Feb-17 17:58 UTC
Re: [Xen-devel] Setting up hypervisor_callback and testing
On Wed, Feb 15, 2006 at 01:33:45PM +0100, Simon Kagstrom wrote:> #define __sti() \ > do { \ > vcpu_info_t *_vcpu; \ > barrier(); \ > _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ > _vcpu->evtchn_upcall_mask = 0; \ > barrier(); /* unmask then check (avoid races) */ \ > if ( unlikely(_vcpu->evtchn_upcall_pending) ) \ > force_evtchn_callback(); \ > } while (0) > > the events should be masked on startup I think, so maybe that''s your > problem.Ok, Ive setup up this. I hadn''t the shared info mapped properly and took me a while to figure out. now when i run the interrupt test i get: (XEN) (file=/usr/src/xen/xen-2.0/xen/include/asm/mm.h, line=157) Error pfn 00000000: ed=fc59e6c0, sd2 Then the code seems to return to the entry point, and run again continuously. I think it''s trying to jump to an address that doesnt exist even though i have callback_event set to _hypervisor_callback. -Ivan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ivan Kelly
2006-Feb-17 19:53 UTC
Re: [Xen-devel] Setting up hypervisor_callback and testing
> Ok, Ive setup up this. I hadn''t the shared info mapped properly and took me a > while to figure out. now when i run the interrupt test i get: > (XEN) (file=/usr/src/xen/xen-2.0/xen/include/asm/mm.h, line=157) Error pfn > 00000000: ed=fc59e6c0, sd2 > Then the code seems to return to the entry point, and run again continuously. > I think it''s trying to jump to an address that doesnt exist even though i have > callback_event set to _hypervisor_callback.Solved my problem now. Not sure what solved it, but i was calling the set_callbacks hypercall without failsafe_addr set. sorted now. -ivan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel