mirror of https://github.com/ipxe/ipxe.git
[xen] Use generic test_and_clear_bit() function
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/51/head
parent
9bab13a772
commit
c14971bf88
|
@ -161,23 +161,4 @@ xen_hypercall_5 ( struct xen_hypervisor *xen, unsigned int hypercall,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Test and clear pending event
|
|
||||||
*
|
|
||||||
* @v xen Xen hypervisor
|
|
||||||
* @v port Event channel port
|
|
||||||
* @ret pending Event was pending
|
|
||||||
*/
|
|
||||||
static inline __attribute__ (( always_inline )) uint8_t
|
|
||||||
xenevent_pending ( struct xen_hypervisor *xen, evtchn_port_t port ) {
|
|
||||||
uint8_t pending;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ( "lock btr %2, %0\n\t"
|
|
||||||
"setc %1\n\t"
|
|
||||||
: "+m" ( xen->shared->evtchn_pending ),
|
|
||||||
"=a" ( pending )
|
|
||||||
: "Ir" ( port ) );
|
|
||||||
return pending;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _BITS_XEN_H */
|
#endif /* _BITS_XEN_H */
|
||||||
|
|
|
@ -13,6 +13,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||||
#define __XEN_INTERFACE_VERSION__ 0x00040400
|
#define __XEN_INTERFACE_VERSION__ 0x00040400
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <ipxe/bitops.h>
|
||||||
#include <ipxe/uaccess.h>
|
#include <ipxe/uaccess.h>
|
||||||
#include <xen/xen.h>
|
#include <xen/xen.h>
|
||||||
#include <xen/event_channel.h>
|
#include <xen/event_channel.h>
|
||||||
|
@ -58,6 +59,19 @@ struct xen_hypervisor {
|
||||||
struct xen_store store;
|
struct xen_store store;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test and clear pending event
|
||||||
|
*
|
||||||
|
* @v xen Xen hypervisor
|
||||||
|
* @v port Event channel port
|
||||||
|
* @ret pending Event was pending
|
||||||
|
*/
|
||||||
|
static inline __attribute__ (( always_inline )) int
|
||||||
|
xenevent_pending ( struct xen_hypervisor *xen, evtchn_port_t port ) {
|
||||||
|
|
||||||
|
return test_and_clear_bit ( port, xen->shared->evtchn_pending );
|
||||||
|
}
|
||||||
|
|
||||||
#include <bits/xen.h>
|
#include <bits/xen.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue