diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 22:36:42 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 22:36:42 -0400 |
| commit | b9da0571050c09863e59f94d0b8594a290d61b88 (patch) | |
| tree | 3632c4fee768db9a27a5c872bd42133692e2f3d0 /drivers/base/node.c | |
| parent | f8cae0f03f75adb54b1d48ddbc90f84a1f5de186 (diff) | |
| parent | 5abd935661e01289ba143c3b2c1ba300c65bcc5f (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (31 commits)
driver core: Display error codes when class suspend fails
Driver core: Add section count to memory_block struct
Driver core: Add mutex for adding/removing memory blocks
Driver core: Move find_memory_block routine
hpilo: Despecificate driver from iLO generation
driver core: Convert link_mem_sections to use find_memory_block_hinted.
driver core: Introduce find_memory_block_hinted which utilizes kset_find_obj_hinted.
kobject: Introduce kset_find_obj_hinted.
driver core: fix build for CONFIG_BLOCK not enabled
driver-core: base: change to new flag variable
sysfs: only access bin file vm_ops with the active lock
sysfs: Fail bin file mmap if vma close is implemented.
FW_LOADER: fix kconfig dependency warning on HOTPLUG
uio: Statically allocate uio_class and use class .dev_attrs.
uio: Support 2^MINOR_BITS minors
uio: Cleanup irq handling.
uio: Don't clear driver data
uio: Fix lack of locking in init_uio_class
SYSFS: Allow boot time switching between deprecated and modern sysfs layout
driver core: remove CONFIG_SYSFS_DEPRECATED_V2 but keep it for block devices
...
Diffstat (limited to 'drivers/base/node.c')
| -rw-r--r-- | drivers/base/node.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index 2872e86837b2..ee53558b452f 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c | |||
| @@ -409,25 +409,27 @@ static int link_mem_sections(int nid) | |||
| 409 | unsigned long start_pfn = NODE_DATA(nid)->node_start_pfn; | 409 | unsigned long start_pfn = NODE_DATA(nid)->node_start_pfn; |
| 410 | unsigned long end_pfn = start_pfn + NODE_DATA(nid)->node_spanned_pages; | 410 | unsigned long end_pfn = start_pfn + NODE_DATA(nid)->node_spanned_pages; |
| 411 | unsigned long pfn; | 411 | unsigned long pfn; |
| 412 | struct memory_block *mem_blk = NULL; | ||
| 412 | int err = 0; | 413 | int err = 0; |
| 413 | 414 | ||
| 414 | for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) { | 415 | for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) { |
| 415 | unsigned long section_nr = pfn_to_section_nr(pfn); | 416 | unsigned long section_nr = pfn_to_section_nr(pfn); |
| 416 | struct mem_section *mem_sect; | 417 | struct mem_section *mem_sect; |
| 417 | struct memory_block *mem_blk; | ||
| 418 | int ret; | 418 | int ret; |
| 419 | 419 | ||
| 420 | if (!present_section_nr(section_nr)) | 420 | if (!present_section_nr(section_nr)) |
| 421 | continue; | 421 | continue; |
| 422 | mem_sect = __nr_to_section(section_nr); | 422 | mem_sect = __nr_to_section(section_nr); |
| 423 | mem_blk = find_memory_block(mem_sect); | 423 | mem_blk = find_memory_block_hinted(mem_sect, mem_blk); |
| 424 | ret = register_mem_sect_under_node(mem_blk, nid); | 424 | ret = register_mem_sect_under_node(mem_blk, nid); |
| 425 | if (!err) | 425 | if (!err) |
| 426 | err = ret; | 426 | err = ret; |
| 427 | 427 | ||
| 428 | /* discard ref obtained in find_memory_block() */ | 428 | /* discard ref obtained in find_memory_block() */ |
| 429 | kobject_put(&mem_blk->sysdev.kobj); | ||
| 430 | } | 429 | } |
| 430 | |||
| 431 | if (mem_blk) | ||
| 432 | kobject_put(&mem_blk->sysdev.kobj); | ||
| 431 | return err; | 433 | return err; |
| 432 | } | 434 | } |
| 433 | 435 | ||
