blob: 74a4b3b64352ec29e9e613b8d8bc41a1ad54a491 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef _LINUX_SHM_H_
2#define _LINUX_SHM_H_
3
Jack Millerab602f72014-08-08 14:23:19 -07004#include <linux/list.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07005#include <asm/page.h>
David Howells607ca462012-10-13 10:46:48 +01006#include <uapi/linux/shm.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07007#include <asm/shmparam.h>
Manfred Spraul060028b2014-06-06 14:37:42 -07008
Linus Torvalds1da177e2005-04-16 15:20:36 -07009struct shmid_kernel /* private to the kernel */
10{
11 struct kern_ipc_perm shm_perm;
Manfred Spraul239521f2014-01-27 17:07:04 -080012 struct file *shm_file;
Linus Torvalds1da177e2005-04-16 15:20:36 -070013 unsigned long shm_nattch;
14 unsigned long shm_segsz;
Deepa Dinamani7ff28192017-08-02 19:51:14 -070015 time64_t shm_atim;
16 time64_t shm_dtim;
17 time64_t shm_ctim;
Linus Torvalds1da177e2005-04-16 15:20:36 -070018 pid_t shm_cprid;
19 pid_t shm_lprid;
20 struct user_struct *mlock_user;
Vasiliy Kulikov5774ed02011-07-29 03:55:31 +040021
22 /* The task created the shm object. NULL if the task is dead. */
23 struct task_struct *shm_creator;
Jack Millerab602f72014-08-08 14:23:19 -070024 struct list_head shm_clist; /* list by creator */
Kees Cook3859a272016-10-28 01:22:25 -070025} __randomize_layout;
Linus Torvalds1da177e2005-04-16 15:20:36 -070026
27/* shm_mode upper byte flags */
28#define SHM_DEST 01000 /* segment will be destroyed on last detach */
29#define SHM_LOCKED 02000 /* segment will not be swapped */
Andi Kleen42d73952012-12-11 16:01:34 -080030
Linus Torvalds1da177e2005-04-16 15:20:36 -070031#ifdef CONFIG_SYSVIPC
Jack Millerab602f72014-08-08 14:23:19 -070032struct sysv_shm {
33 struct list_head shm_clist;
34};
35
Will Deacon079a96a2012-07-30 14:42:38 -070036long do_shmat(int shmid, char __user *shmaddr, int shmflg, unsigned long *addr,
37 unsigned long shmlba);
Yaowei Bai2954e4402016-01-20 15:01:11 -080038bool is_file_shm_hugepages(struct file *file);
Jack Millerab602f72014-08-08 14:23:19 -070039void exit_shm(struct task_struct *task);
40#define shm_init_task(task) INIT_LIST_HEAD(&(task)->sysvshm.shm_clist)
Linus Torvalds1da177e2005-04-16 15:20:36 -070041#else
Jack Millerab602f72014-08-08 14:23:19 -070042struct sysv_shm {
43 /* empty */
44};
45
Linus Torvalds1da177e2005-04-16 15:20:36 -070046static inline long do_shmat(int shmid, char __user *shmaddr,
Will Deacon079a96a2012-07-30 14:42:38 -070047 int shmflg, unsigned long *addr,
48 unsigned long shmlba)
Linus Torvalds1da177e2005-04-16 15:20:36 -070049{
50 return -ENOSYS;
51}
Yaowei Bai2954e4402016-01-20 15:01:11 -080052static inline bool is_file_shm_hugepages(struct file *file)
Adam Litke516dffd2007-03-01 15:46:08 -080053{
Yaowei Bai2954e4402016-01-20 15:01:11 -080054 return false;
Adam Litke516dffd2007-03-01 15:46:08 -080055}
Vasiliy Kulikovb34a6b12011-07-26 16:08:48 -070056static inline void exit_shm(struct task_struct *task)
57{
58}
Jack Millerab602f72014-08-08 14:23:19 -070059static inline void shm_init_task(struct task_struct *task)
60{
61}
Linus Torvalds1da177e2005-04-16 15:20:36 -070062#endif
63
Linus Torvalds1da177e2005-04-16 15:20:36 -070064#endif /* _LINUX_SHM_H_ */