david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[xen] Use generic test_and_clear_bit() function

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2016-03-16 21:27:07 +00:00
parent 9bab13a772
commit c14971bf88
2 changed files with 14 additions and 19 deletions

View File

@ -161,23 +161,4 @@ xen_hypercall_5 ( struct xen_hypervisor *xen, unsigned int hypercall,
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 */

View File

@ -13,6 +13,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define __XEN_INTERFACE_VERSION__ 0x00040400
#include <stdint.h>
#include <ipxe/bitops.h>
#include <ipxe/uaccess.h>
#include <xen/xen.h>
#include <xen/event_channel.h>
@ -58,6 +59,19 @@ struct xen_hypervisor {
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>
/**