Blame view

include/linux/memory.h 4.54 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>
3947be196   Dave Hansen   [PATCH] memory ho...
20

a63fdc515   Benjamin Herrenschmidt   mm: Move definiti...
21
  #define MIN_MEMORY_BLOCK_SIZE     (1 << SECTION_SIZE_BITS)
3947be196   Dave Hansen   [PATCH] memory ho...
22
  struct memory_block {
d33601644   Nathan Fontenot   memory hotplug: U...
23
24
  	unsigned long start_section_nr;
  	unsigned long end_section_nr;
3947be196   Dave Hansen   [PATCH] memory ho...
25
  	unsigned long state;
076812159   Nathan Fontenot   Driver core: Add ...
26
  	int section_count;
3947be196   Dave Hansen   [PATCH] memory ho...
27
28
29
30
31
32
  	/*
  	 * This serializes all state change requests.  It isn't
  	 * held during creation because the control files are
  	 * created long after the critical areas during
  	 * initialization.
  	 */
da19cbcf7   Daniel Walker   driver core: memo...
33
  	struct mutex state_mutex;
3947be196   Dave Hansen   [PATCH] memory ho...
34
35
36
  	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' ...
37
  	struct device dev;
3947be196   Dave Hansen   [PATCH] memory ho...
38
  };
bc32df008   Heiko Carstens   memory hotplug: a...
39
  int arch_get_memory_phys_device(unsigned long start_pfn);
3947be196   Dave Hansen   [PATCH] memory ho...
40
41
42
43
  /* 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...
44
45
46
  #define	MEM_GOING_ONLINE	(1<<3)
  #define	MEM_CANCEL_ONLINE	(1<<4)
  #define	MEM_CANCEL_OFFLINE	(1<<5)
3947be196   Dave Hansen   [PATCH] memory ho...
47

7b78d335a   Yasunori Goto   memory hotplug: r...
48
49
50
51
52
  struct memory_notify {
  	unsigned long start_pfn;
  	unsigned long nr_pages;
  	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 *);
3947be196   Dave Hansen   [PATCH] memory ho...
108
109
  extern int unregister_memory_section(struct mem_section *);
  extern int memory_dev_init(void);
b792de39d   Olaf Hering   [PATCH] Fix compi...
110
  extern int remove_memory_block(unsigned long, struct mem_section *, int);
7b78d335a   Yasunori Goto   memory hotplug: r...
111
  extern int memory_notify(unsigned long val, void *v);
925cc71e5   Robert Jennings   mm: Add notifier ...
112
  extern int memory_isolate_notify(unsigned long val, void *v);
98383031e   Robin Holt   driver core: Intr...
113
114
  extern struct memory_block *find_memory_block_hinted(struct mem_section *,
  							struct memory_block *);
c04fc586c   Gary Hade   mm: show node to ...
115
  extern struct memory_block *find_memory_block(struct mem_section *);
3947be196   Dave Hansen   [PATCH] memory ho...
116
  #define CONFIG_MEM_BLOCK_SIZE	(PAGES_PER_SECTION<<PAGE_SHIFT)
c04fc586c   Gary Hade   mm: show node to ...
117
  enum mem_add_context { BOOT, HOTPLUG };
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
3947be196   Dave Hansen   [PATCH] memory ho...
121
  #define hotplug_memory_notifier(fn, pri) {			\
02d0e6753   Al Viro   hotplug_memory_no...
122
  	static __meminitdata struct notifier_block fn##_mem_nb =\
3947be196   Dave Hansen   [PATCH] memory ho...
123
124
125
  		{ .notifier_call = fn, .priority = pri };	\
  	register_memory_notifier(&fn##_mem_nb);			\
  }
b9049e234   Yasunori Goto   memory hotplug: m...
126
127
128
  #else
  #define hotplug_memory_notifier(fn, pri) do { } while (0)
  #endif
3947be196   Dave Hansen   [PATCH] memory ho...
129

06c421ee0   Kevin Hilman   memory_accessor: ...
130
131
132
133
134
135
136
137
138
139
  /*
   * '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...
140
  /*
0e39ac444   Mathieu Desnoyers   tracing, Text Edi...
141
142
143
144
   * 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...
145
  #endif /* _LINUX_MEMORY_H_ */