Blame view

include/linux/memory.h 2.56 KB
3947be196   Dave Hansen   [PATCH] memory ho...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  /*
   * 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_
  
  #include <linux/sysdev.h>
  #include <linux/node.h>
  #include <linux/compiler.h>
  
  #include <asm/semaphore.h>
  
  struct memory_block {
  	unsigned long phys_index;
  	unsigned long state;
  	/*
  	 * 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.
  	 */
  	struct semaphore state_sem;
  	int phys_device;		/* to which fru does this belong? */
  	void *hw;			/* optional pointer to fw/hw data */
  	int (*phys_callback)(struct memory_block *);
  	struct sys_device sysdev;
  };
  
  /* 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 */
  
  /*
   * All of these states are currently kernel-internal for notifying
   * kernel components and architectures.
   *
   * For MEM_MAPPING_INVALID, all notifier chains with priority >0
   * are called before pfn_to_page() becomes invalid.  The priority=0
   * entry is reserved for the function that actually makes
   * pfn_to_page() stop working.  Any notifiers that want to be called
   * after that should have priority <0.
   */
  #define	MEM_MAPPING_INVALID	(1<<3)
8c65b4a60   Tim Schmielau   [PATCH] fix remai...
56
57
  struct notifier_block;
  struct mem_section;
53947027a   Keith Mannthey   [PATCH] hot-add-m...
58
  #ifndef CONFIG_MEMORY_HOTPLUG_SPARSE
3947be196   Dave Hansen   [PATCH] memory ho...
59
60
61
62
63
64
65
66
67
68
69
70
  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)
  {
  }
  #else
3947be196   Dave Hansen   [PATCH] memory ho...
71
72
73
  extern int register_new_memory(struct mem_section *);
  extern int unregister_memory_section(struct mem_section *);
  extern int memory_dev_init(void);
b792de39d   Olaf Hering   [PATCH] Fix compi...
74
  extern int remove_memory_block(unsigned long, struct mem_section *, int);
3947be196   Dave Hansen   [PATCH] memory ho...
75
76
  
  #define CONFIG_MEM_BLOCK_SIZE	(PAGES_PER_SECTION<<PAGE_SHIFT)
3947be196   Dave Hansen   [PATCH] memory ho...
77

53947027a   Keith Mannthey   [PATCH] hot-add-m...
78
  #endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */
3947be196   Dave Hansen   [PATCH] memory ho...
79
80
81
82
83
84
85
86
  
  #define hotplug_memory_notifier(fn, pri) {			\
  	static struct notifier_block fn##_mem_nb =		\
  		{ .notifier_call = fn, .priority = pri };	\
  	register_memory_notifier(&fn##_mem_nb);			\
  }
  
  #endif /* _LINUX_MEMORY_H_ */