Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / linux / blk-iopoll.h
diff --git a/kernel/include/linux/blk-iopoll.h b/kernel/include/linux/blk-iopoll.h
new file mode 100644 (file)
index 0000000..77ae77c
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef BLK_IOPOLL_H
+#define BLK_IOPOLL_H
+
+struct blk_iopoll;
+typedef int (blk_iopoll_fn)(struct blk_iopoll *, int);
+
+struct blk_iopoll {
+       struct list_head list;
+       unsigned long state;
+       unsigned long data;
+       int weight;
+       int max;
+       blk_iopoll_fn *poll;
+};
+
+enum {
+       IOPOLL_F_SCHED          = 0,
+       IOPOLL_F_DISABLE        = 1,
+};
+
+/*
+ * Returns 0 if we successfully set the IOPOLL_F_SCHED bit, indicating
+ * that we were the first to acquire this iop for scheduling. If this iop
+ * is currently disabled, return "failure".
+ */
+static inline int blk_iopoll_sched_prep(struct blk_iopoll *iop)
+{
+       if (!test_bit(IOPOLL_F_DISABLE, &iop->state))
+               return test_and_set_bit(IOPOLL_F_SCHED, &iop->state);
+
+       return 1;
+}
+
+static inline int blk_iopoll_disable_pending(struct blk_iopoll *iop)
+{
+       return test_bit(IOPOLL_F_DISABLE, &iop->state);
+}
+
+extern void blk_iopoll_sched(struct blk_iopoll *);
+extern void blk_iopoll_init(struct blk_iopoll *, int, blk_iopoll_fn *);
+extern void blk_iopoll_complete(struct blk_iopoll *);
+extern void __blk_iopoll_complete(struct blk_iopoll *);
+extern void blk_iopoll_enable(struct blk_iopoll *);
+extern void blk_iopoll_disable(struct blk_iopoll *);
+
+#endif