LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: travis@sgi.com To: Andrew Morton <akpm@linux-foundation.org>, Andi Kleen <ak@suse.de>, mingo@elte.hu Cc: Christoph Lameter <clameter@sgi.com>, Jack Steiner <steiner@sgi.com>, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH 04/10] x86: Change NR_CPUS arrays in intel_cacheinfo Date: Sun, 13 Jan 2008 10:34:57 -0800 [thread overview] Message-ID: <20080113183454.551029000@sgi.com> (raw) In-Reply-To: 20080113183453.973425000@sgi.com [-- Attachment #1: NR_CPUS-arrays-in-intel_cacheinfo --] [-- Type: text/plain, Size: 5841 bytes --] Change the following static arrays sized by NR_CPUS to per_cpu data variables: _cpuid4_info *cpuid4_info[NR_CPUS]; _index_kobject *index_kobject[NR_CPUS]; kobject * cache_kobject[NR_CPUS]; Signed-off-by: Mike Travis <travis@sgi.com> Reviewed-by: Christoph Lameter <clameter@sgi.com> --- arch/x86/kernel/cpu/intel_cacheinfo.c | 55 +++++++++++++++++----------------- 1 file changed, 29 insertions(+), 26 deletions(-) --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -451,8 +451,8 @@ unsigned int __cpuinit init_intel_cachei } /* pointer to _cpuid4_info array (for each cache leaf) */ -static struct _cpuid4_info *cpuid4_info[NR_CPUS]; -#define CPUID4_INFO_IDX(x,y) (&((cpuid4_info[x])[y])) +static DEFINE_PER_CPU(struct _cpuid4_info *, cpuid4_info); +#define CPUID4_INFO_IDX(x,y) (&((per_cpu(cpuid4_info, x))[y])) #ifdef CONFIG_SMP static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index) @@ -474,7 +474,7 @@ static void __cpuinit cache_shared_cpu_m if (cpu_data(i).apicid >> index_msb == c->apicid >> index_msb) { cpu_set(i, this_leaf->shared_cpu_map); - if (i != cpu && cpuid4_info[i]) { + if (i != cpu && per_cpu(cpuid4_info, i)) { sibling_leaf = CPUID4_INFO_IDX(i, index); cpu_set(cpu, sibling_leaf->shared_cpu_map); } @@ -505,8 +505,8 @@ static void __cpuinit free_cache_attribu for (i = 0; i < num_cache_leaves; i++) cache_remove_shared_cpu_map(cpu, i); - kfree(cpuid4_info[cpu]); - cpuid4_info[cpu] = NULL; + kfree(per_cpu(cpuid4_info, cpu)); + per_cpu(cpuid4_info, cpu) = NULL; } static int __cpuinit detect_cache_attributes(unsigned int cpu) @@ -519,9 +519,9 @@ static int __cpuinit detect_cache_attrib if (num_cache_leaves == 0) return -ENOENT; - cpuid4_info[cpu] = kzalloc( + per_cpu(cpuid4_info, cpu) = kzalloc( sizeof(struct _cpuid4_info) * num_cache_leaves, GFP_KERNEL); - if (cpuid4_info[cpu] == NULL) + if (per_cpu(cpuid4_info, cpu) == NULL) return -ENOMEM; oldmask = current->cpus_allowed; @@ -546,8 +546,8 @@ static int __cpuinit detect_cache_attrib out: if (retval) { - kfree(cpuid4_info[cpu]); - cpuid4_info[cpu] = NULL; + kfree(per_cpu(cpuid4_info, cpu)); + per_cpu(cpuid4_info, cpu) = NULL; } return retval; @@ -561,7 +561,7 @@ out: extern struct sysdev_class cpu_sysdev_class; /* from drivers/base/cpu.c */ /* pointer to kobject for cpuX/cache */ -static struct kobject * cache_kobject[NR_CPUS]; +static DEFINE_PER_CPU(struct kobject *, cache_kobject); struct _index_kobject { struct kobject kobj; @@ -570,8 +570,8 @@ struct _index_kobject { }; /* pointer to array of kobjects for cpuX/cache/indexY */ -static struct _index_kobject *index_kobject[NR_CPUS]; -#define INDEX_KOBJECT_PTR(x,y) (&((index_kobject[x])[y])) +static DEFINE_PER_CPU(struct _index_kobject *, index_kobject); +#define INDEX_KOBJECT_PTR(x,y) (&((per_cpu(index_kobject, x))[y])) #define show_one_plus(file_name, object, val) \ static ssize_t show_##file_name \ @@ -684,10 +684,10 @@ static struct kobj_type ktype_percpu_ent static void __cpuinit cpuid4_cache_sysfs_exit(unsigned int cpu) { - kfree(cache_kobject[cpu]); - kfree(index_kobject[cpu]); - cache_kobject[cpu] = NULL; - index_kobject[cpu] = NULL; + kfree(per_cpu(cache_kobject, cpu)); + kfree(per_cpu(index_kobject, cpu)); + per_cpu(cache_kobject, cpu) = NULL; + per_cpu(index_kobject, cpu) = NULL; free_cache_attributes(cpu); } @@ -703,13 +703,14 @@ static int __cpuinit cpuid4_cache_sysfs_ return err; /* Allocate all required memory */ - cache_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL); - if (unlikely(cache_kobject[cpu] == NULL)) + per_cpu(cache_kobject, cpu) = + kzalloc(sizeof(struct kobject), GFP_KERNEL); + if (unlikely(per_cpu(cache_kobject, cpu) == NULL)) goto err_out; - index_kobject[cpu] = kzalloc( + per_cpu(index_kobject, cpu) = kzalloc( sizeof(struct _index_kobject ) * num_cache_leaves, GFP_KERNEL); - if (unlikely(index_kobject[cpu] == NULL)) + if (unlikely(per_cpu(index_kobject, cpu) == NULL)) goto err_out; return 0; @@ -733,7 +734,8 @@ static int __cpuinit cache_add_dev(struc if (unlikely(retval < 0)) return retval; - retval = kobject_init_and_add(cache_kobject[cpu], &ktype_percpu_entry, + retval = kobject_init_and_add(per_cpu(cache_kobject, cpu), + &ktype_percpu_entry, &sys_dev->kobj, "%s", "cache"); if (retval < 0) { cpuid4_cache_sysfs_exit(cpu); @@ -745,13 +747,14 @@ static int __cpuinit cache_add_dev(struc this_object->cpu = cpu; this_object->index = i; retval = kobject_init_and_add(&(this_object->kobj), - &ktype_cache, cache_kobject[cpu], + &ktype_cache, + per_cpu(cache_kobject, cpu), "index%1lu", i); if (unlikely(retval)) { for (j = 0; j < i; j++) { kobject_put(&(INDEX_KOBJECT_PTR(cpu,j)->kobj)); } - kobject_put(cache_kobject[cpu]); + kobject_put(per_cpu(cache_kobject, cpu)); cpuid4_cache_sysfs_exit(cpu); break; } @@ -760,7 +763,7 @@ static int __cpuinit cache_add_dev(struc if (!retval) cpu_set(cpu, cache_dev_map); - kobject_uevent(cache_kobject[cpu], KOBJ_ADD); + kobject_uevent(per_cpu(cache_kobject, cpu), KOBJ_ADD); return retval; } @@ -769,7 +772,7 @@ static void __cpuinit cache_remove_dev(s unsigned int cpu = sys_dev->id; unsigned long i; - if (cpuid4_info[cpu] == NULL) + if (per_cpu(cpuid4_info, cpu) == NULL) return; if (!cpu_isset(cpu, cache_dev_map)) return; @@ -777,7 +780,7 @@ static void __cpuinit cache_remove_dev(s for (i = 0; i < num_cache_leaves; i++) kobject_put(&(INDEX_KOBJECT_PTR(cpu,i)->kobj)); - kobject_put(cache_kobject[cpu]); + kobject_put(per_cpu(cache_kobject, cpu)); cpuid4_cache_sysfs_exit(cpu); } --
next prev parent reply other threads:[~2008-01-13 18:35 UTC|newest] Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-01-13 18:34 [PATCH 00/10] x86: Reduce memory and intra-node effects with large count NR_CPUs travis 2008-01-13 18:34 ` [PATCH 01/10] x86: Change size of APICIDs from u8 to u16 travis 2008-01-14 12:23 ` Mel Gorman 2008-01-14 18:13 ` Mike Travis 2008-01-14 19:26 ` Mike Travis 2008-01-14 18:10 ` Jan Engelhardt 2008-01-14 18:22 ` Mike Travis 2008-01-14 18:32 ` Mike Travis 2008-01-14 19:16 ` Christoph Lameter 2008-01-13 18:34 ` [PATCH 02/10] x86: Change size of node ids " travis 2008-01-13 20:01 ` Eric Dumazet 2008-01-13 18:34 ` [PATCH 03/10] x86: Change NR_CPUS arrays in powernow-k8 travis 2008-01-13 18:34 ` travis [this message] 2008-01-13 18:34 ` [PATCH 05/10] x86: Change NR_CPUS arrays in smpboot_64 travis 2008-01-13 18:34 ` [PATCH 06/10] x86: Change NR_CPUS arrays in topology travis 2008-01-14 18:25 ` Jan Engelhardt 2008-01-14 19:08 ` Mike Travis 2008-01-13 18:35 ` [PATCH 07/10] x86: Cleanup x86_cpu_to_apicid references travis 2008-01-13 18:35 ` [PATCH 08/10] x86: Change NR_CPUS arrays in numa_64 travis 2008-01-14 11:14 ` Ingo Molnar 2008-01-14 17:17 ` Mike Travis 2008-01-14 18:14 ` Jan Engelhardt 2008-01-13 18:35 ` [PATCH 09/10] x86: Change NR_CPUS arrays in acpi-cpufreq travis 2008-01-13 18:35 ` [PATCH 10/10] x86: Change bios_cpu_apicid to percpu data variable travis 2008-01-14 8:14 ` [PATCH 00/10] x86: Reduce memory and intra-node effects with large count NR_CPUs Ingo Molnar 2008-01-14 9:00 ` Ingo Molnar 2008-01-14 17:52 ` Mike Travis 2008-01-14 10:04 ` Andi Kleen 2008-01-14 10:11 ` Ingo Molnar 2008-01-14 11:30 ` Andi Kleen 2008-01-16 7:34 ` Nick Piggin 2008-01-16 18:07 ` Christoph Lameter 2008-01-14 18:00 ` Mike Travis
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080113183454.551029000@sgi.com \ --to=travis@sgi.com \ --cc=ak@suse.de \ --cc=akpm@linux-foundation.org \ --cc=clameter@sgi.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mingo@elte.hu \ --cc=steiner@sgi.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).