Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 176246
b: refs/heads/master
c: 9a30523
h: refs/heads/master
v: v3
  • Loading branch information
Lee Schermerhorn authored and Linus Torvalds committed Dec 15, 2009
1 parent a20edb2 commit f64fbb2
Show file tree
Hide file tree
Showing 4 changed files with 299 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4e25b2576efda24c02e2d6b9bcb5965a3f865f33
refs/heads/master: 9a30523066cde73c1442b76224bb540de9f9b0b0
39 changes: 39 additions & 0 deletions trunk/drivers/base/node.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,43 @@ static ssize_t node_read_distance(struct sys_device * dev,
}
static SYSDEV_ATTR(distance, S_IRUGO, node_read_distance, NULL);

#ifdef CONFIG_HUGETLBFS
/*
* hugetlbfs per node attributes registration interface:
* When/if hugetlb[fs] subsystem initializes [sometime after this module],
* it will register its per node attributes for all nodes online at that
* time. It will also call register_hugetlbfs_with_node(), below, to
* register its attribute registration functions with this node driver.
* Once these hooks have been initialized, the node driver will call into
* the hugetlb module to [un]register attributes for hot-plugged nodes.
*/
static node_registration_func_t __hugetlb_register_node;
static node_registration_func_t __hugetlb_unregister_node;

static inline void hugetlb_register_node(struct node *node)
{
if (__hugetlb_register_node)
__hugetlb_register_node(node);
}

static inline void hugetlb_unregister_node(struct node *node)
{
if (__hugetlb_unregister_node)
__hugetlb_unregister_node(node);
}

void register_hugetlbfs_with_node(node_registration_func_t doregister,
node_registration_func_t unregister)
{
__hugetlb_register_node = doregister;
__hugetlb_unregister_node = unregister;
}
#else
static inline void hugetlb_register_node(struct node *node) {}

static inline void hugetlb_unregister_node(struct node *node) {}
#endif


/*
* register_node - Setup a sysfs device for a node.
Expand All @@ -196,6 +233,7 @@ int register_node(struct node *node, int num, struct node *parent)
sysdev_create_file(&node->sysdev, &attr_distance);

scan_unevictable_register_node(node);
hugetlb_register_node(node);
}
return error;
}
Expand All @@ -216,6 +254,7 @@ void unregister_node(struct node *node)
sysdev_remove_file(&node->sysdev, &attr_distance);

scan_unevictable_unregister_node(node);
hugetlb_unregister_node(node);

sysdev_unregister(&node->sysdev);
}
Expand Down
11 changes: 11 additions & 0 deletions trunk/include/linux/node.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ struct node {

struct memory_block;
extern struct node node_devices[];
typedef void (*node_registration_func_t)(struct node *);

extern int register_node(struct node *, int, struct node *);
extern void unregister_node(struct node *node);
Expand All @@ -39,6 +40,11 @@ extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int register_mem_sect_under_node(struct memory_block *mem_blk,
int nid);
extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk);

#ifdef CONFIG_HUGETLBFS
extern void register_hugetlbfs_with_node(node_registration_func_t doregister,
node_registration_func_t unregister);
#endif
#else
static inline int register_one_node(int nid)
{
Expand All @@ -65,6 +71,11 @@ static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
{
return 0;
}

static inline void register_hugetlbfs_with_node(node_registration_func_t reg,
node_registration_func_t unreg)
{
}
#endif

#define to_node(sys_device) container_of(sys_device, struct node, sysdev)
Expand Down
Loading

0 comments on commit f64fbb2

Please sign in to comment.