Blame view

include/linux/memory.h 4.82 KB
3947be196   Dave Hansen   [PATCH] memory ho...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  /*
   * include/linux/memory.h - generic memory definition
   *
   * This is mainly for topological representation. We define the
   * basic "struct memory_block" here, which can be embedded in per-arch
   * definitions or NUMA information.
   *
   * Basic handling of the devices is done in drivers/base/memory.c
   * and system devices are handled in drivers/base/sys.c.
   *
   * Memory block are exported via sysfs in the class/memory/devices/
   * directory.
   *
   */
  #ifndef _LINUX_MEMORY_H_
  #define _LINUX_MEMORY_H_
3947be196   Dave Hansen   [PATCH] memory ho...
17
18
  #include <linux/node.h>
  #include <linux/compiler.h>
da19cbcf7   Daniel Walker   driver core: memo...
19
  #include <linux/mutex.h>
f02c69680   Andrew Morton   include/linux/mem...
20
  #include <linux/notifier.h>
3947be196   Dave Hansen   [PATCH] memory ho...
21

05cf96398   Jianguo Wu   mm/ia64: fix a me...
22
  #define MIN_MEMORY_BLOCK_SIZE     (1UL << SECTION_SIZE_BITS)
a63fdc515   Benjamin Herrenschmidt   mm: Move definiti...
23

3947be196   Dave Hansen   [PATCH] memory ho...
24
  struct memory_block {
d33601644   Nathan Fontenot   memory hotplug: U...
25
26
  	unsigned long start_section_nr;
  	unsigned long end_section_nr;
fa2be40fe   Seth Jennings   drivers: base: us...
27
28
29
  	unsigned long state;		/* serialized by the dev->lock */
  	int section_count;		/* serialized by mem_sysfs_mutex */
  	int online_type;		/* for passing data to online routine */
3947be196   Dave Hansen   [PATCH] memory ho...
30
31
32
  	int phys_device;		/* to which fru does this belong? */
  	void *hw;			/* optional pointer to fw/hw data */
  	int (*phys_callback)(struct memory_block *);
10fbcf4c6   Kay Sievers   convert 'memory' ...
33
  	struct device dev;
3947be196   Dave Hansen   [PATCH] memory ho...
34
  };
bc32df008   Heiko Carstens   memory hotplug: a...
35
  int arch_get_memory_phys_device(unsigned long start_pfn);
e0a8400c6   Bjorn Helgaas   memory-hotplug: R...
36
  unsigned long memory_block_size_bytes(void);
bc32df008   Heiko Carstens   memory hotplug: a...
37

3947be196   Dave Hansen   [PATCH] memory ho...
38
39
40
41
  /* These states are exposed to userspace as text strings in sysfs */
  #define	MEM_ONLINE		(1<<0) /* exposed to userspace */
  #define	MEM_GOING_OFFLINE	(1<<1) /* exposed to userspace */
  #define	MEM_OFFLINE		(1<<2) /* exposed to userspace */
7b78d335a   Yasunori Goto   memory hotplug: r...
42
43
44
  #define	MEM_GOING_ONLINE	(1<<3)
  #define	MEM_CANCEL_ONLINE	(1<<4)
  #define	MEM_CANCEL_OFFLINE	(1<<5)
3947be196   Dave Hansen   [PATCH] memory ho...
45

7b78d335a   Yasunori Goto   memory hotplug: r...
46
47
48
  struct memory_notify {
  	unsigned long start_pfn;
  	unsigned long nr_pages;
d9713679d   Lai Jiangshan   memory_hotplug: f...
49
  	int status_change_nid_normal;
6715ddf94   Lai Jiangshan   hotplug: update n...
50
  	int status_change_nid_high;
7b78d335a   Yasunori Goto   memory hotplug: r...
51
52
  	int status_change_nid;
  };
3947be196   Dave Hansen   [PATCH] memory ho...
53

925cc71e5   Robert Jennings   mm: Add notifier ...
54
55
56
57
58
59
60
61
62
63
64
65
  /*
   * During pageblock isolation, count the number of pages within the
   * range [start_pfn, start_pfn + nr_pages) which are owned by code
   * in the notifier chain.
   */
  #define MEM_ISOLATE_COUNT	(1<<0)
  
  struct memory_isolate_notify {
  	unsigned long start_pfn;	/* Start of range to check */
  	unsigned int nr_pages;		/* # pages in range to check */
  	unsigned int pages_found;	/* # pages owned found by callbacks */
  };
8c65b4a60   Tim Schmielau   [PATCH] fix remai...
66
67
  struct notifier_block;
  struct mem_section;
0c40ba4fd   Nadia Derbey   ipc: define the s...
68
69
70
71
72
  /*
   * Priorities for the hotplug memory callback routines (stored in decreasing
   * order in the callback chain)
   */
  #define SLAB_CALLBACK_PRI       1
b6b337ad1   Nadia Derbey   ipc: recompute ms...
73
  #define IPC_CALLBACK_PRI        10
0c40ba4fd   Nadia Derbey   ipc: define the s...
74

53947027a   Keith Mannthey   [PATCH] hot-add-m...
75
  #ifndef CONFIG_MEMORY_HOTPLUG_SPARSE
3947be196   Dave Hansen   [PATCH] memory ho...
76
77
78
79
80
81
82
83
84
85
86
  static inline int memory_dev_init(void)
  {
  	return 0;
  }
  static inline int register_memory_notifier(struct notifier_block *nb)
  {
  	return 0;
  }
  static inline void unregister_memory_notifier(struct notifier_block *nb)
  {
  }
7b78d335a   Yasunori Goto   memory hotplug: r...
87
88
89
90
  static inline int memory_notify(unsigned long val, void *v)
  {
  	return 0;
  }
925cc71e5   Robert Jennings   mm: Add notifier ...
91
92
93
94
95
96
97
98
99
100
101
  static inline int register_memory_isolate_notifier(struct notifier_block *nb)
  {
  	return 0;
  }
  static inline void unregister_memory_isolate_notifier(struct notifier_block *nb)
  {
  }
  static inline int memory_isolate_notify(unsigned long val, void *v)
  {
  	return 0;
  }
3947be196   Dave Hansen   [PATCH] memory ho...
102
  #else
7b78d335a   Yasunori Goto   memory hotplug: r...
103
104
  extern int register_memory_notifier(struct notifier_block *nb);
  extern void unregister_memory_notifier(struct notifier_block *nb);
925cc71e5   Robert Jennings   mm: Add notifier ...
105
106
  extern int register_memory_isolate_notifier(struct notifier_block *nb);
  extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
c04fc586c   Gary Hade   mm: show node to ...
107
  extern int register_new_memory(int, struct mem_section *);
4edd7ceff   David Rientjes   mm, hotplug: avoi...
108
  #ifdef CONFIG_MEMORY_HOTREMOVE
3947be196   Dave Hansen   [PATCH] memory ho...
109
  extern int unregister_memory_section(struct mem_section *);
4edd7ceff   David Rientjes   mm, hotplug: avoi...
110
  #endif
3947be196   Dave Hansen   [PATCH] memory ho...
111
  extern int memory_dev_init(void);
7b78d335a   Yasunori Goto   memory hotplug: r...
112
  extern int memory_notify(unsigned long val, void *v);
925cc71e5   Robert Jennings   mm: Add notifier ...
113
  extern int memory_isolate_notify(unsigned long val, void *v);
98383031e   Robin Holt   driver core: Intr...
114
115
  extern struct memory_block *find_memory_block_hinted(struct mem_section *,
  							struct memory_block *);
c04fc586c   Gary Hade   mm: show node to ...
116
  extern struct memory_block *find_memory_block(struct mem_section *);
3947be196   Dave Hansen   [PATCH] memory ho...
117
  #define CONFIG_MEM_BLOCK_SIZE	(PAGES_PER_SECTION<<PAGE_SHIFT)
53947027a   Keith Mannthey   [PATCH] hot-add-m...
118
  #endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */
3947be196   Dave Hansen   [PATCH] memory ho...
119

b9049e234   Yasunori Goto   memory hotplug: m...
120
  #ifdef CONFIG_MEMORY_HOTPLUG
f02c69680   Andrew Morton   include/linux/mem...
121
  #define hotplug_memory_notifier(fn, pri) ({		\
02d0e6753   Al Viro   hotplug_memory_no...
122
  	static __meminitdata struct notifier_block fn##_mem_nb =\
f02c69680   Andrew Morton   include/linux/mem...
123
  		{ .notifier_call = fn, .priority = pri };\
3947be196   Dave Hansen   [PATCH] memory ho...
124
  	register_memory_notifier(&fn##_mem_nb);			\
f02c69680   Andrew Morton   include/linux/mem...
125
126
127
  })
  #define register_hotmemory_notifier(nb)		register_memory_notifier(nb)
  #define unregister_hotmemory_notifier(nb) 	unregister_memory_notifier(nb)
b9049e234   Yasunori Goto   memory hotplug: m...
128
  #else
ace6128d6   Vincent StehlĂ©   memory hotplug: f...
129
  #define hotplug_memory_notifier(fn, pri)	({ 0; })
f02c69680   Andrew Morton   include/linux/mem...
130
131
132
  /* These aren't inline functions due to a GCC bug. */
  #define register_hotmemory_notifier(nb)    ({ (void)(nb); 0; })
  #define unregister_hotmemory_notifier(nb)  ({ (void)(nb); })
b9049e234   Yasunori Goto   memory hotplug: m...
133
  #endif
3947be196   Dave Hansen   [PATCH] memory ho...
134

06c421ee0   Kevin Hilman   memory_accessor: ...
135
136
137
138
139
140
141
142
143
144
  /*
   * 'struct memory_accessor' is a generic interface to provide
   * in-kernel access to persistent memory such as i2c or SPI EEPROMs
   */
  struct memory_accessor {
  	ssize_t (*read)(struct memory_accessor *, char *buf, off_t offset,
  			size_t count);
  	ssize_t (*write)(struct memory_accessor *, const char *buf,
  			 off_t offset, size_t count);
  };
714f83d5d   Linus Torvalds   Merge branch 'tra...
145
  /*
0e39ac444   Mathieu Desnoyers   tracing, Text Edi...
146
147
148
149
   * Kernel text modification mutex, used for code patching. Users of this lock
   * can sleep.
   */
  extern struct mutex text_mutex;
3947be196   Dave Hansen   [PATCH] memory ho...
150
  #endif /* _LINUX_MEMORY_H_ */