git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.3
[linux-2.6.git]
/
include
/
linux
/
vs_context.h
diff --git
a/include/linux/vs_context.h
b/include/linux/vs_context.h
index
727a16c
..
9d119cd
100644
(file)
--- a/
include/linux/vs_context.h
+++ b/
include/linux/vs_context.h
@@
-2,21
+2,12
@@
#define _VX_VS_CONTEXT_H
#define _VX_VS_CONTEXT_H
-// #define VX_DEBUG
-
#include <linux/kernel.h>
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include "vserver/context.h"
#include <linux/kernel.h>
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include "vserver/context.h"
-
-#undef vxdprintk
-#if defined(VX_DEBUG)
-#define vxdprintk(x...) printk("vxd: " x)
-#else
-#define vxdprintk(x...)
-#endif
-
+#include "vserver/debug.h"
extern int proc_pid_vx_info(struct task_struct *, char *);
extern int proc_pid_vx_info(struct task_struct *, char *);
@@
-29,7
+20,7
@@
static inline struct vx_info *__get_vx_info(struct vx_info *vxi,
{
if (!vxi)
return NULL;
{
if (!vxi)
return NULL;
- vx
dprintk("get_vx_info(%p[#%d.%d])\t%s:%d\n
",
+ vx
lprintk(VXD_CBIT(xid, 2), "get_vx_info(%p[#%d.%d])
",
vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
_file, _line);
atomic_inc(&vxi->vx_usecnt);
vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
_file, _line);
atomic_inc(&vxi->vx_usecnt);
@@
-37,8
+28,7
@@
static inline struct vx_info *__get_vx_info(struct vx_info *vxi,
}
}
-#define free_vx_info(i) \
- call_rcu(&i->vx_rcu, rcu_free_vx_info, i);
+extern void free_vx_info(struct vx_info *);
#define put_vx_info(i) __put_vx_info(i,__FILE__,__LINE__)
#define put_vx_info(i) __put_vx_info(i,__FILE__,__LINE__)
@@
-46,7
+36,7
@@
static inline void __put_vx_info(struct vx_info *vxi, const char *_file, int _li
{
if (!vxi)
return;
{
if (!vxi)
return;
- vx
dprintk("put_vx_info(%p[#%d.%d])\t%s:%d\n
",
+ vx
lprintk(VXD_CBIT(xid, 2), "put_vx_info(%p[#%d.%d])
",
vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
_file, _line);
if (atomic_dec_and_test(&vxi->vx_usecnt))
vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
_file, _line);
if (atomic_dec_and_test(&vxi->vx_usecnt))
@@
-58,35
+48,40
@@
static inline void __put_vx_info(struct vx_info *vxi, const char *_file, int _li
static inline void __set_vx_info(struct vx_info **vxp, struct vx_info *vxi,
const char *_file, int _line)
{
static inline void __set_vx_info(struct vx_info **vxp, struct vx_info *vxi,
const char *_file, int _line)
{
- BUG_ON(*vxp);
+ struct vx_info *vxo;
+
if (!vxi)
return;
if (!vxi)
return;
- vxdprintk("set_vx_info(%p[#%d.%d.%d])\t%s:%d\n",
+
+ vxlprintk(VXD_CBIT(xid, 3), "set_vx_info(%p[#%d.%d.%d])",
vxi, vxi?vxi->vx_id:0,
vxi?atomic_read(&vxi->vx_usecnt):0,
vxi?atomic_read(&vxi->vx_refcnt):0,
_file, _line);
vxi, vxi?vxi->vx_id:0,
vxi?atomic_read(&vxi->vx_usecnt):0,
vxi?atomic_read(&vxi->vx_refcnt):0,
_file, _line);
+
atomic_inc(&vxi->vx_refcnt);
atomic_inc(&vxi->vx_refcnt);
- *vxp = __get_vx_info(vxi, _file, _line);
+ vxo = xchg(vxp, __get_vx_info(vxi, _file, _line));
+ BUG_ON(vxo);
}
}
-#define
clr_vx_info(p)
__clr_vx_info(p,__FILE__,__LINE__)
+#define
clr_vx_info(p)
__clr_vx_info(p,__FILE__,__LINE__)
static inline void __clr_vx_info(struct vx_info **vxp,
const char *_file, int _line)
{
static inline void __clr_vx_info(struct vx_info **vxp,
const char *_file, int _line)
{
- struct vx_info *vxo
= *vxp
;
+ struct vx_info *vxo;
+ vxo = xchg(vxp, NULL);
if (!vxo)
return;
if (!vxo)
return;
- vxdprintk("clr_vx_info(%p[#%d.%d.%d])\t%s:%d\n",
+
+ vxlprintk(VXD_CBIT(xid, 3), "clr_vx_info(%p[#%d.%d.%d])",
vxo, vxo?vxo->vx_id:0,
vxo?atomic_read(&vxo->vx_usecnt):0,
vxo?atomic_read(&vxo->vx_refcnt):0,
_file, _line);
vxo, vxo?vxo->vx_id:0,
vxo?atomic_read(&vxo->vx_usecnt):0,
vxo?atomic_read(&vxo->vx_refcnt):0,
_file, _line);
- *vxp = NULL;
- wmb();
- if (vxo && atomic_dec_and_test(&vxo->vx_refcnt))
+
+ if (atomic_dec_and_test(&vxo->vx_refcnt))
unhash_vx_info(vxo);
__put_vx_info(vxo, _file, _line);
}
unhash_vx_info(vxo);
__put_vx_info(vxo, _file, _line);
}
@@
-98,8
+93,10
@@
static __inline__ struct vx_info *__task_get_vx_info(struct task_struct *p,
const char *_file, int _line)
{
struct vx_info *vxi;
const char *_file, int _line)
{
struct vx_info *vxi;
-
+
task_lock(p);
task_lock(p);
+ vxlprintk(VXD_CBIT(xid, 5), "task_get_vx_info(%p)",
+ p, _file, _line);
vxi = __get_vx_info(p->vx_info, _file, _line);
task_unlock(p);
return vxi;
vxi = __get_vx_info(p->vx_info, _file, _line);
task_unlock(p);
return vxi;
@@
-120,9
+117,6
@@
static __inline__ void __vx_verify_info(
}
}
-#undef vxdprintk
-#define vxdprintk(x...)
-
#else
#warning duplicate inclusion
#endif
#else
#warning duplicate inclusion
#endif