Re: [PATCH] replace various uses of num_physpages by totalram_pages
- From: Amerigo Wang <xiyou.wangcong@xxxxxxxxx>
- Date: Wed, 1 Jul 2009 15:43:41 +0800
On Tue, Jun 30, 2009 at 12:08:32PM +0100, Jan Beulich wrote:
Sizing of memory allocations shouldn't depend on the number of physical
pages found in a system, as that generally include (perhaps a huge
amount of) non-RAM pages. The amount of what actually is usable as
storage should instead be used as a basis here.
For this part, ACK.
In line with that, the memory hotplug code should update num_physpages
in a way that it retains its original (post-boot) meaning; in
particular, decreasing the value should at best be done with great care
- this patch doesn't try to ever decrease this value at all as it
doesn't really seem meaningful to do so.
Could you please split this part out and send it with Cc: to linux-mm
mailing list?
Thanks.
--
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
drivers/char/agp/backend.c | 4 ++--
drivers/parisc/ccio-dma.c | 4 ++--
drivers/parisc/sba_iommu.c | 4 ++--
drivers/xen/balloon.c | 4 ----
fs/ntfs/malloc.h | 2 +-
include/linux/mm.h | 1 +
init/main.c | 4 ++--
mm/memory_hotplug.c | 6 ++++--
mm/slab.c | 2 +-
mm/swap.c | 2 +-
mm/vmalloc.c | 4 ++--
net/core/sock.c | 4 ++--
net/dccp/proto.c | 6 +++---
net/decnet/dn_route.c | 2 +-
net/ipv4/route.c | 2 +-
net/ipv4/tcp.c | 4 ++--
net/netfilter/nf_conntrack_core.c | 4 ++--
net/netfilter/x_tables.c | 2 +-
net/netfilter/xt_hashlimit.c | 8 ++++----
net/netlink/af_netlink.c | 6 +++---
net/sctp/protocol.c | 6 +++---
21 files changed, 40 insertions(+), 41 deletions(-)
--- linux-2.6.31-rc1/drivers/char/agp/backend.c 2009-06-26 17:49:43.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/drivers/char/agp/backend.c 2009-06-24 16:09:34.000000000 +0200
@@ -114,9 +114,9 @@ static int agp_find_max(void)
long memory, index, result;
#if PAGE_SHIFT < 20
- memory = num_physpages >> (20 - PAGE_SHIFT);
+ memory = totalram_pages >> (20 - PAGE_SHIFT);
#else
- memory = num_physpages << (PAGE_SHIFT - 20);
+ memory = totalram_pages << (PAGE_SHIFT - 20);
#endif
index = 1;
--- linux-2.6.31-rc1/drivers/parisc/ccio-dma.c 2009-06-10 05:05:27.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/drivers/parisc/ccio-dma.c 2009-06-24 16:10:47.000000000 +0200
@@ -1267,7 +1267,7 @@ ccio_ioc_init(struct ioc *ioc)
** Hot-Plug/Removal of PCI cards. (aka PCI OLARD).
*/
- iova_space_size = (u32) (num_physpages / count_parisc_driver(&ccio_driver));
+ iova_space_size = (u32) (totalram_pages / count_parisc_driver(&ccio_driver));
/* limit IOVA space size to 1MB-1GB */
@@ -1306,7 +1306,7 @@ ccio_ioc_init(struct ioc *ioc)
DBG_INIT("%s() hpa 0x%p mem %luMB IOV %dMB (%d bits)\n",
__func__, ioc->ioc_regs,
- (unsigned long) num_physpages >> (20 - PAGE_SHIFT),
+ (unsigned long) totalram_pages >> (20 - PAGE_SHIFT),
iova_space_size>>20,
iov_order + PAGE_SHIFT);
--- linux-2.6.31-rc1/drivers/parisc/sba_iommu.c 2009-06-26 17:49:47.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/drivers/parisc/sba_iommu.c 2009-06-24 16:10:58.000000000 +0200
@@ -1390,7 +1390,7 @@ sba_ioc_init(struct parisc_device *sba,
** for DMA hints - ergo only 30 bits max.
*/
- iova_space_size = (u32) (num_physpages/global_ioc_cnt);
+ iova_space_size = (u32) (totalram_pages/global_ioc_cnt);
/* limit IOVA space size to 1MB-1GB */
if (iova_space_size < (1 << (20 - PAGE_SHIFT))) {
@@ -1415,7 +1415,7 @@ sba_ioc_init(struct parisc_device *sba,
DBG_INIT("%s() hpa 0x%lx mem %ldMB IOV %dMB (%d bits)\n",
__func__,
ioc->ioc_hpa,
- (unsigned long) num_physpages >> (20 - PAGE_SHIFT),
+ (unsigned long) totalram_pages >> (20 - PAGE_SHIFT),
iova_space_size>>20,
iov_order + PAGE_SHIFT);
--- linux-2.6.31-rc1/drivers/xen/balloon.c 2009-06-10 05:05:27.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/drivers/xen/balloon.c 2009-06-24 16:02:01.000000000 +0200
@@ -96,11 +96,7 @@ static struct balloon_stats balloon_stat
/* We increase/decrease in batches which fit in a page */
static unsigned long frame_list[PAGE_SIZE / sizeof(unsigned long)];
-/* VM /proc information for memory */
-extern unsigned long totalram_pages;
-
#ifdef CONFIG_HIGHMEM
-extern unsigned long totalhigh_pages;
#define inc_totalhigh_pages() (totalhigh_pages++)
#define dec_totalhigh_pages() (totalhigh_pages--)
#else
--- linux-2.6.31-rc1/fs/ntfs/malloc.h 2008-04-17 04:49:44.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/fs/ntfs/malloc.h 2009-06-24 16:11:49.000000000 +0200
@@ -47,7 +47,7 @@ static inline void *__ntfs_malloc(unsign
return kmalloc(PAGE_SIZE, gfp_mask & ~__GFP_HIGHMEM);
/* return (void *)__get_free_page(gfp_mask); */
}
- if (likely(size >> PAGE_SHIFT < num_physpages))
+ if (likely((size >> PAGE_SHIFT) < totalram_pages))
return __vmalloc(size, gfp_mask, PAGE_KERNEL);
return NULL;
}
--- linux-2.6.31-rc1/include/linux/mm.h 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/include/linux/mm.h 2009-06-24 16:00:50.000000000 +0200
@@ -25,6 +25,7 @@ extern unsigned long max_mapnr;
#endif
extern unsigned long num_physpages;
+extern unsigned long totalram_pages;
extern void * high_memory;
extern int page_cluster;
--- linux-2.6.31-rc1/init/main.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/init/main.c 2009-06-24 16:12:30.000000000 +0200
@@ -691,12 +691,12 @@ asmlinkage void __init start_kernel(void
#endif
thread_info_cache_init();
cred_init();
- fork_init(num_physpages);
+ fork_init(totalram_pages);
proc_caches_init();
buffer_init();
key_init();
security_init();
- vfs_caches_init(num_physpages);
+ vfs_caches_init(totalram_pages);
radix_tree_init();
signals_init();
/* rootfs populating might need page-writeback */
--- linux-2.6.31-rc1/mm/memory_hotplug.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/mm/memory_hotplug.c 2009-06-24 16:04:44.000000000 +0200
@@ -339,8 +339,11 @@ EXPORT_SYMBOL_GPL(__remove_pages);
void online_page(struct page *page)
{
+ unsigned long pfn = page_to_pfn(page);
+
totalram_pages++;
- num_physpages++;
+ if (pfn >= num_physpages)
+ num_physpages = pfn + 1;
#ifdef CONFIG_HIGHMEM
if (PageHighMem(page))
@@ -831,7 +834,6 @@ repeat:
zone->present_pages -= offlined_pages;
zone->zone_pgdat->node_present_pages -= offlined_pages;
totalram_pages -= offlined_pages;
- num_physpages -= offlined_pages;
setup_per_zone_wmarks();
calculate_zone_inactive_ratio(zone);
--- linux-2.6.31-rc1/mm/slab.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/mm/slab.c 2009-06-24 16:06:21.000000000 +0200
@@ -1384,7 +1384,7 @@ void __init kmem_cache_init(void)
* Fragmentation resistance on low memory - only use bigger
* page orders on machines with more than 32MB of memory.
*/
- if (num_physpages > (32 << 20) >> PAGE_SHIFT)
+ if (totalram_pages > (32 << 20) >> PAGE_SHIFT)
slab_break_gfp_order = BREAK_GFP_ORDER_HI;
/* Bootstrap is tricky, because several objects are allocated
--- linux-2.6.31-rc1/mm/swap.c 2009-06-10 05:05:27.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/mm/swap.c 2009-06-24 16:06:40.000000000 +0200
@@ -496,7 +496,7 @@ EXPORT_SYMBOL(pagevec_lookup_tag);
*/
void __init swap_setup(void)
{
- unsigned long megs = num_physpages >> (20 - PAGE_SHIFT);
+ unsigned long megs = totalram_pages >> (20 - PAGE_SHIFT);
#ifdef CONFIG_SWAP
bdi_init(swapper_space.backing_dev_info);
--- linux-2.6.31-rc1/mm/vmalloc.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/mm/vmalloc.c 2009-06-24 16:05:47.000000000 +0200
@@ -1368,7 +1368,7 @@ void *vmap(struct page **pages, unsigned
might_sleep();
- if (count > num_physpages)
+ if (count > totalram_pages)
return NULL;
area = get_vm_area_caller((count << PAGE_SHIFT), flags,
@@ -1475,7 +1475,7 @@ static void *__vmalloc_node(unsigned lon
unsigned long real_size = size;
size = PAGE_ALIGN(size);
- if (!size || (size >> PAGE_SHIFT) > num_physpages)
+ if (!size || (size >> PAGE_SHIFT) > totalram_pages)
return NULL;
area = __get_vm_area_node(size, VM_ALLOC, VMALLOC_START, VMALLOC_END,
--- linux-2.6.31-rc1/net/core/sock.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/core/sock.c 2009-06-24 16:14:00.000000000 +0200
@@ -1169,12 +1169,12 @@ EXPORT_SYMBOL_GPL(sk_setup_caps);
void __init sk_init(void)
{
- if (num_physpages <= 4096) {
+ if (totalram_pages <= 4096) {
sysctl_wmem_max = 32767;
sysctl_rmem_max = 32767;
sysctl_wmem_default = 32767;
sysctl_rmem_default = 32767;
- } else if (num_physpages >= 131072) {
+ } else if (totalram_pages >= 131072) {
sysctl_wmem_max = 131071;
sysctl_rmem_max = 131071;
}
--- linux-2.6.31-rc1/net/dccp/proto.c 2009-06-10 05:05:27.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/dccp/proto.c 2009-06-24 16:13:35.000000000 +0200
@@ -1049,10 +1049,10 @@ static int __init dccp_init(void)
*
* The methodology is similar to that of the buffer cache.
*/
- if (num_physpages >= (128 * 1024))
- goal = num_physpages >> (21 - PAGE_SHIFT);
+ if (totalram_pages >= (128 * 1024))
+ goal = totalram_pages >> (21 - PAGE_SHIFT);
else
- goal = num_physpages >> (23 - PAGE_SHIFT);
+ goal = totalram_pages >> (23 - PAGE_SHIFT);
if (thash_entries)
goal = (thash_entries *
--- linux-2.6.31-rc1/net/decnet/dn_route.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/decnet/dn_route.c 2009-06-24 16:17:11.000000000 +0200
@@ -1750,7 +1750,7 @@ void __init dn_route_init(void)
dn_route_timer.expires = jiffies + decnet_dst_gc_interval * HZ;
add_timer(&dn_route_timer);
- goal = num_physpages >> (26 - PAGE_SHIFT);
+ goal = totalram_pages >> (26 - PAGE_SHIFT);
for(order = 0; (1UL << order) < goal; order++)
/* NOTHING */;
--- linux-2.6.31-rc1/net/ipv4/route.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/ipv4/route.c 2009-06-24 16:14:48.000000000 +0200
@@ -3412,7 +3412,7 @@ int __init ip_rt_init(void)
alloc_large_system_hash("IP route cache",
sizeof(struct rt_hash_bucket),
rhash_entries,
- (num_physpages >= 128 * 1024) ?
+ (totalram_pages >= 128 * 1024) ?
15 : 17,
0,
&rt_hash_log,
--- linux-2.6.31-rc1/net/ipv4/tcp.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/ipv4/tcp.c 2009-06-24 16:14:24.000000000 +0200
@@ -2857,7 +2857,7 @@ void __init tcp_init(void)
alloc_large_system_hash("TCP established",
sizeof(struct inet_ehash_bucket),
thash_entries,
- (num_physpages >= 128 * 1024) ?
+ (totalram_pages >= 128 * 1024) ?
13 : 15,
0,
&tcp_hashinfo.ehash_size,
@@ -2874,7 +2874,7 @@ void __init tcp_init(void)
alloc_large_system_hash("TCP bind",
sizeof(struct inet_bind_hashbucket),
tcp_hashinfo.ehash_size,
- (num_physpages >= 128 * 1024) ?
+ (totalram_pages >= 128 * 1024) ?
13 : 15,
0,
&tcp_hashinfo.bhash_size,
--- linux-2.6.31-rc1/net/netfilter/nf_conntrack_core.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/netfilter/nf_conntrack_core.c 2009-06-24 16:16:47.000000000 +0200
@@ -1230,9 +1230,9 @@ static int nf_conntrack_init_init_net(vo
* machine has 512 buckets. >= 1GB machines have 16384 buckets. */
if (!nf_conntrack_htable_size) {
nf_conntrack_htable_size
- = (((num_physpages << PAGE_SHIFT) / 16384)
+ = (((totalram_pages << PAGE_SHIFT) / 16384)
/ sizeof(struct hlist_head));
- if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE))
+ if (totalram_pages > (1024 * 1024 * 1024 / PAGE_SIZE))
nf_conntrack_htable_size = 16384;
if (nf_conntrack_htable_size < 32)
nf_conntrack_htable_size = 32;
--- linux-2.6.31-rc1/net/netfilter/x_tables.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/netfilter/x_tables.c 2009-06-24 16:16:28.000000000 +0200
@@ -617,7 +617,7 @@ struct xt_table_info *xt_alloc_table_inf
int cpu;
/* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */
- if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > num_physpages)
+ if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
return NULL;
newinfo = kzalloc(XT_TABLE_INFO_SZ, GFP_KERNEL);
--- linux-2.6.31-rc1/net/netfilter/xt_hashlimit.c 2009-06-10 05:05:27.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/netfilter/xt_hashlimit.c 2009-06-24 16:16:07.000000000 +0200
@@ -194,9 +194,9 @@ static int htable_create_v0(struct xt_ha
if (minfo->cfg.size)
size = minfo->cfg.size;
else {
- size = ((num_physpages << PAGE_SHIFT) / 16384) /
+ size = ((totalram_pages << PAGE_SHIFT) / 16384) /
sizeof(struct list_head);
- if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE))
+ if (totalram_pages > (1024 * 1024 * 1024 / PAGE_SIZE))
size = 8192;
if (size < 16)
size = 16;
@@ -266,9 +266,9 @@ static int htable_create(struct xt_hashl
if (minfo->cfg.size) {
size = minfo->cfg.size;
} else {
- size = (num_physpages << PAGE_SHIFT) / 16384 /
+ size = (totalram_pages << PAGE_SHIFT) / 16384 /
sizeof(struct list_head);
- if (num_physpages > 1024 * 1024 * 1024 / PAGE_SIZE)
+ if (totalram_pages > 1024 * 1024 * 1024 / PAGE_SIZE)
size = 8192;
if (size < 16)
size = 16;
--- linux-2.6.31-rc1/net/netlink/af_netlink.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/netlink/af_netlink.c 2009-06-24 16:17:28.000000000 +0200
@@ -2026,10 +2026,10 @@ static int __init netlink_proto_init(voi
if (!nl_table)
goto panic;
- if (num_physpages >= (128 * 1024))
- limit = num_physpages >> (21 - PAGE_SHIFT);
+ if (totalram_pages >= (128 * 1024))
+ limit = totalram_pages >> (21 - PAGE_SHIFT);
else
- limit = num_physpages >> (23 - PAGE_SHIFT);
+ limit = totalram_pages >> (23 - PAGE_SHIFT);
order = get_bitmask_order(limit) - 1 + PAGE_SHIFT;
limit = (1UL << order) / sizeof(struct hlist_head);
--- linux-2.6.31-rc1/net/sctp/protocol.c 2009-06-26 17:50:00.000000000 +0200
+++ 2.6.31-rc1-use-totalram_pages/net/sctp/protocol.c 2009-06-24 16:15:36.000000000 +0200
@@ -1185,10 +1185,10 @@ SCTP_STATIC __init int sctp_init(void)
/* Size and allocate the association hash table.
* The methodology is similar to that of the tcp hash tables.
*/
- if (num_physpages >= (128 * 1024))
- goal = num_physpages >> (22 - PAGE_SHIFT);
+ if (totalram_pages >= (128 * 1024))
+ goal = totalram_pages >> (22 - PAGE_SHIFT);
else
- goal = num_physpages >> (24 - PAGE_SHIFT);
+ goal = totalram_pages >> (24 - PAGE_SHIFT);
for (order = 0; (1UL << order) < goal; order++)
;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
- Prev by Date: Re: [Patch 1/3] elf: fix one check-after-use
- Next by Date: [RFC][PATCH] Deny CLONE_PARENT|CLONE_NEWPID|CLONE_SIGHAND combination
- Previous by thread: Re: [PATCH] replace various uses of num_physpages by totalram_pages
- Next by thread: Re: [RFC PATCH] vfs: new open(2) flag to open filesystem node
- Index(es):
Relevant Pages
|