mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
![Manfred Spraul](/assets/img/avatar_default.png)
ipc has two management structures that exist for every id: - struct kern_ipc_perm, it contains e.g. the permissions. - struct ipc_rcu, it contains the rcu head for rcu handling and the refcount. The patch merges both structures. As a bonus, we may save one cacheline, because both structures are cacheline aligned. In addition, it reduces the number of casts, instead most codepaths can use container_of. To simplify code, the ipc_rcu_alloc initializes the allocation to 0. [manfred@colorfullife.com: really include the memset() into ipc_alloc_rcu()] Link: http://lkml.kernel.org/r/564f8612-0601-b267-514f-a9f650ec9b32@colorfullife.com Link: http://lkml.kernel.org/r/20170525185107.12869-3-manfred@colorfullife.com Signed-off-by: Manfred Spraul <manfred@colorfullife.com> Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: Kees Cook <keescook@chromium.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
28 lines
548 B
C
28 lines
548 B
C
#ifndef _LINUX_IPC_H
|
|
#define _LINUX_IPC_H
|
|
|
|
#include <linux/spinlock.h>
|
|
#include <linux/uidgid.h>
|
|
#include <uapi/linux/ipc.h>
|
|
|
|
#define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */
|
|
|
|
/* used by in-kernel data structures */
|
|
struct kern_ipc_perm {
|
|
spinlock_t lock;
|
|
bool deleted;
|
|
int id;
|
|
key_t key;
|
|
kuid_t uid;
|
|
kgid_t gid;
|
|
kuid_t cuid;
|
|
kgid_t cgid;
|
|
umode_t mode;
|
|
unsigned long seq;
|
|
void *security;
|
|
|
|
struct rcu_head rcu;
|
|
atomic_t refcount;
|
|
} ____cacheline_aligned_in_smp;
|
|
|
|
#endif /* _LINUX_IPC_H */
|