]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[xen] Use generic test_and_clear_bit() function
authorMichael Brown <mcb30@ipxe.org>
Wed, 16 Mar 2016 21:27:07 +0000 (21:27 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 16 Mar 2016 22:46:05 +0000 (22:46 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/include/bits/xen.h
src/include/ipxe/xen.h

index fc065ea388ae054dc13e09b79e608340145171ec..3433cea1f95813cfe96adf12f4244938f742b113 100644 (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 */
index eac1145ad8b011b5ff3dea6626175714bca6a353..0fb8b7625e6d9c05f273c93c9b625f2399e393f0 100644 (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>
 
 /**