temporary fix for inet_twdr_hangman() related bug
[linux-2.6.git] / include / linux / vs_base.h
index b2dfad6..0022fe4 100644 (file)
@@ -3,12 +3,19 @@
 
 #include "vserver/context.h"
 
+#define VX_IRQ        0x4000
+#define VX_IRQ_MASK   0xF000
+#if 1
+#include <linux/hardirq.h>
+#endif
 
 #define vx_task_xid(t) ((t)->xid)
 
 #define vx_current_xid() vx_task_xid(current)
 
-#define vx_check(c,m)  __vx_check(vx_current_xid(),c,m)
+#define current_vx_info() (current->vx_info)
+
+#define vx_check(c,m)  __vx_check(vx_current_xid(),c,m|VX_IRQ)
 
 #define vx_weak_check(c,m)     ((m) ? vx_check(c,m) : 1)
 
@@ -33,6 +40,11 @@ static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode)
                        (id > 1) && (id < MIN_D_CONTEXT))
                        return 1;
        }
+#if 1
+       if ((mode & VX_IRQ) && (unlikely(in_interrupt())))
+               return 1;
+#endif
+
        return (((mode & VX_ADMIN) && (cid == 0)) ||
                ((mode & VX_WATCH) && (cid == 1)) ||
                ((mode & VX_HOSTID) && (id == 0)));
@@ -100,7 +112,6 @@ static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode)
 #define vx_capable(b,c) (capable(b) || \
        ((current->euid == 0) && vx_ccaps(c)))
 
-
 #else
 #warning duplicate inclusion
 #endif