From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH] x86/cpufreq: pass pointers to cpu masks where possible Date: Mon, 12 Jul 2010 09:46:37 +0100 Message-ID: <4C3AF28D020000780000AB18@vpn.id2.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__PartB598CE7D.0__=" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__PartB598CE7D.0__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline This includes replacing the bogus definition of cpumask_test_cpu() (introduced by c/s 20073) with a Linux compatible one and replacing the bad uses with cpu_isset(). Signed-off-by: Jan Beulich --- 2010-06-15.orig/xen/arch/x86/acpi/cpufreq/cpufreq.c 2010-07-06 = 16:48:55.000000000 +0200 +++ 2010-06-15/xen/arch/x86/acpi/cpufreq/cpufreq.c 2010-07-06 = 16:49:39.000000000 +0200 @@ -129,7 +129,7 @@ typedef union { =20 struct drv_cmd { unsigned int type; - cpumask_t mask; + const cpumask_t *mask; drv_addr_union addr; u32 val; }; @@ -183,33 +183,32 @@ static void drv_read(struct drv_cmd *cmd ASSERT(cpus_weight(cmd->mask) =3D=3D 1); =20 /* to reduce IPI for the sake of performance */ - if (likely(cpu_isset(smp_processor_id(), cmd->mask))) + if (likely(cpumask_test_cpu(smp_processor_id(), cmd->mask))) do_drv_read((void *)cmd); else - on_selected_cpus(&cmd->mask, do_drv_read, cmd, 1); + on_selected_cpus(cmd->mask, do_drv_read, cmd, 1); } =20 static void drv_write(struct drv_cmd *cmd) { - if ((cpus_weight(cmd->mask) =3D=3D 1) && - cpu_isset(smp_processor_id(), cmd->mask)) + if (cpumask_equal(cmd->mask, cpumask_of(smp_processor_id()))) do_drv_write((void *)cmd); else - on_selected_cpus(&cmd->mask, do_drv_write, cmd, 1); + on_selected_cpus(cmd->mask, do_drv_write, cmd, 1); } =20 -static u32 get_cur_val(cpumask_t mask) +static u32 get_cur_val(const cpumask_t *mask) { struct cpufreq_policy *policy; struct processor_performance *perf; struct drv_cmd cmd; unsigned int cpu =3D smp_processor_id(); =20 - if (unlikely(cpus_empty(mask))) + if (unlikely(cpumask_empty(mask))) return 0; =20 - if (!cpu_isset(cpu, mask)) - cpu =3D first_cpu(mask); + if (!cpumask_test_cpu(cpu, mask)) + cpu =3D cpumask_first(mask); if (cpu >=3D NR_CPUS || !cpu_online(cpu)) return 0; =20 @@ -232,7 +231,7 @@ static u32 get_cur_val(cpumask_t mask) return 0; } =20 - cmd.mask =3D cpumask_of_cpu(cpu); + cmd.mask =3D cpumask_of(cpu); =20 drv_read(&cmd); return cmd.val; @@ -378,7 +377,7 @@ static unsigned int get_cur_freq_on_cpu( data->acpi_data =3D=3D NULL || data->freq_table =3D=3D NULL)) return 0; =20 - freq =3D extract_freq(get_cur_val(cpumask_of_cpu(cpu)), data); + freq =3D extract_freq(get_cur_val(cpumask_of(cpu)), data); return freq; } =20 @@ -402,7 +401,7 @@ static void feature_detect(void *info) } } =20 -static unsigned int check_freqs(cpumask_t mask, unsigned int freq, +static unsigned int check_freqs(const cpumask_t *mask, unsigned int freq, struct acpi_cpufreq_data *data) { unsigned int cur_freq; @@ -473,12 +472,10 @@ static int acpi_cpufreq_target(struct cp return -ENODEV; } =20 - cpus_clear(cmd.mask); - if (policy->shared_type !=3D CPUFREQ_SHARED_TYPE_ANY) - cmd.mask =3D online_policy_cpus; + cmd.mask =3D &online_policy_cpus; else - cpu_set(policy->cpu, cmd.mask); + cmd.mask =3D cpumask_of(policy->cpu); =20 freqs.old =3D perf->states[perf->state].core_frequency * 1000; freqs.new =3D data->freq_table[next_state].frequency; --- 2010-06-15.orig/xen/arch/x86/acpi/cpufreq/powernow.c 2010-07-06 = 16:46:52.000000000 +0200 +++ 2010-06-15/xen/arch/x86/acpi/cpufreq/powernow.c 2010-07-06 = 16:12:49.000000000 +0200 @@ -66,7 +66,7 @@ static struct cpufreq_driver powernow_cp =20 struct drv_cmd { unsigned int type; - cpumask_t mask; + const cpumask_t *mask; u32 val; int turbo; }; @@ -124,12 +124,10 @@ static int powernow_cpufreq_target(struc return 0; } =20 - cpus_clear(cmd.mask); - if (policy->shared_type !=3D CPUFREQ_SHARED_TYPE_ANY) - cmd.mask =3D online_policy_cpus; + cmd.mask =3D &online_policy_cpus; else - cpu_set(policy->cpu, cmd.mask); + cmd.mask =3D cpumask_of(policy->cpu); =20 freqs.old =3D perf->states[perf->state].core_frequency * 1000; freqs.new =3D data->freq_table[next_state].frequency; @@ -137,7 +135,7 @@ static int powernow_cpufreq_target(struc cmd.val =3D next_perf_state; cmd.turbo =3D policy->turbo; =20 - on_selected_cpus(&cmd.mask, transition_pstate, &cmd, 1); + on_selected_cpus(cmd.mask, transition_pstate, &cmd, 1); =20 for_each_cpu_mask(j, online_policy_cpus) cpufreq_statistic_update(j, perf->state, next_perf_state); --- 2010-06-15.orig/xen/arch/x86/hpet.c 2010-07-06 16:46:52.000000000 = +0200 +++ 2010-06-15/xen/arch/x86/hpet.c 2010-07-06 16:12:49.000000000 = +0200 @@ -198,7 +198,7 @@ again: { write_lock_irq(&ch->cpumask_lock); =20 - if ( cpumask_test_cpu(cpu, ch->cpumask) ) + if ( cpu_isset(cpu, ch->cpumask) ) { if ( per_cpu(timer_deadline_start, cpu) <=3D now ) cpu_set(cpu, mask); --- 2010-06-15.orig/xen/arch/x86/io_apic.c 2010-07-06 16:46:52.0000000= 00 +0200 +++ 2010-06-15/xen/arch/x86/io_apic.c 2010-07-06 16:12:49.000000000 = +0200 @@ -460,7 +460,7 @@ void irq_complete_move(struct irq_desc * vector =3D get_irq_regs()->entry_vector; me =3D smp_processor_id(); =20 - if (vector =3D=3D cfg->vector && cpumask_test_cpu(me, cfg->domain)) + if (vector =3D=3D cfg->vector && cpu_isset(me, cfg->domain)) send_cleanup_vector(cfg); } =20 --- 2010-06-15.orig/xen/include/xen/cpumask.h 2010-07-06 16:46:52.0000000= 00 +0200 +++ 2010-06-15/xen/include/xen/cpumask.h 2010-07-06 16:12:49.0000000= 00 +0200 @@ -106,6 +106,7 @@ static inline void __cpus_clear(cpumask_ } =20 /* No static inline type checking - see Subtlety (1) above. */ +#define cpumask_test_cpu(cpu, cpumask) test_bit(cpu, (cpumask)->bits) #define cpu_isset(cpu, cpumask) test_bit((cpu), (cpumask).bits) =20 #define cpu_test_and_set(cpu, cpumask) __cpu_test_and_set((cpu), = &(cpumask)) @@ -114,16 +115,6 @@ static inline int __cpu_test_and_set(int return test_and_set_bit(cpu, addr->bits); } =20 -/** - * cpumask_test_cpu - test for a cpu in a cpumask - */ -#define cpumask_test_cpu(cpu, cpumask) __cpu_test((cpu), &(cpumask)) - -static inline int __cpu_test(int cpu, cpumask_t *addr) -{ - return test_bit(cpu, addr->bits); -} - #define cpu_test_and_clear(cpu, cpumask) __cpu_test_and_clear((cpu), = &(cpumask)) static inline int __cpu_test_and_clear(int cpu, cpumask_t *addr) { @@ -166,6 +157,7 @@ static inline void __cpus_complement(cpu bitmap_complement(dstp->bits, srcp->bits, nbits); } =20 +#define cpumask_equal(src1, src2) __cpus_equal(src1, src2, NR_CPUS) #define cpus_equal(src1, src2) __cpus_equal(&(src1), &(src2), NR_CPUS) static inline int __cpus_equal(const cpumask_t *src1p, const cpumask_t *src2p, int nbits) @@ -187,6 +179,7 @@ static inline int __cpus_subset(const cp return bitmap_subset(src1p->bits, src2p->bits, nbits); } =20 +#define cpumask_empty(src) __cpus_empty(src, NR_CPUS) #define cpus_empty(src) __cpus_empty(&(src), NR_CPUS) static inline int __cpus_empty(const cpumask_t *srcp, int nbits) { @@ -227,18 +220,21 @@ static inline void __cpus_shift_left(cpu bitmap_shift_left(dstp->bits, srcp->bits, n, nbits); } =20 +#define cpumask_first(src) __first_cpu(src, NR_CPUS) #define first_cpu(src) __first_cpu(&(src), NR_CPUS) static inline int __first_cpu(const cpumask_t *srcp, int nbits) { return min_t(int, nbits, find_first_bit(srcp->bits, nbits)); } =20 +#define cpumask_next(n, src) __next_cpu(n, src, NR_CPUS) #define next_cpu(n, src) __next_cpu((n), &(src), NR_CPUS) static inline int __next_cpu(int n, const cpumask_t *srcp, int nbits) { return min_t(int, nbits, find_next_bit(srcp->bits, nbits, n+1)); } =20 +#define cpumask_last(src) __last_cpu(src, NR_CPUS) #define last_cpu(src) __last_cpu(&(src), NR_CPUS) static inline int __last_cpu(const cpumask_t *srcp, int nbits) { @@ -250,6 +246,7 @@ static inline int __last_cpu(const cpuma return pcpu; } =20 +#define cpumask_cycle(n, src) __cycle_cpu(n, src, NR_CPUS) #define cycle_cpu(n, src) __cycle_cpu((n), &(src), NR_CPUS) static inline int __cycle_cpu(int n, const cpumask_t *srcp, int nbits) { --=__PartB598CE7D.0__= Content-Type: text/plain; name="x86-cpufreq-cpumask.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="x86-cpufreq-cpumask.patch" This includes replacing the bogus definition of cpumask_test_cpu()=0A(intro= duced by c/s 20073) with a Linux compatible one and replacing=0Athe bad = uses with cpu_isset().=0A=0ASigned-off-by: Jan Beulich =0A=0A--- 2010-06-15.orig/xen/arch/x86/acpi/cpufreq/cpufreq.c 2010-07-06 = 16:48:55.000000000 +0200=0A+++ 2010-06-15/xen/arch/x86/acpi/cpufreq/cpufreq= .c 2010-07-06 16:49:39.000000000 +0200=0A@@ -129,7 +129,7 @@ typedef = union {=0A =0A struct drv_cmd {=0A unsigned int type;=0A- cpumask_t = mask;=0A+ const cpumask_t *mask;=0A drv_addr_union addr;=0A u32 = val;=0A };=0A@@ -183,33 +183,32 @@ static void drv_read(struct drv_cmd = *cmd=0A ASSERT(cpus_weight(cmd->mask) =3D=3D 1);=0A =0A /* to = reduce IPI for the sake of performance */=0A- if (likely(cpu_isset(smp_p= rocessor_id(), cmd->mask)))=0A+ if (likely(cpumask_test_cpu(smp_processo= r_id(), cmd->mask)))=0A do_drv_read((void *)cmd);=0A else=0A- = on_selected_cpus(&cmd->mask, do_drv_read, cmd, 1);=0A+ = on_selected_cpus(cmd->mask, do_drv_read, cmd, 1);=0A }=0A =0A static void = drv_write(struct drv_cmd *cmd)=0A {=0A- if ((cpus_weight(cmd->mask) = =3D=3D 1) &&=0A- cpu_isset(smp_processor_id(), cmd->mask))=0A+ = if (cpumask_equal(cmd->mask, cpumask_of(smp_processor_id())))=0A = do_drv_write((void *)cmd);=0A else=0A- on_selected_cpus(&cmd->ma= sk, do_drv_write, cmd, 1);=0A+ on_selected_cpus(cmd->mask, = do_drv_write, cmd, 1);=0A }=0A =0A-static u32 get_cur_val(cpumask_t = mask)=0A+static u32 get_cur_val(const cpumask_t *mask)=0A {=0A struct = cpufreq_policy *policy;=0A struct processor_performance *perf;=0A = struct drv_cmd cmd;=0A unsigned int cpu =3D smp_processor_id();=0A = =0A- if (unlikely(cpus_empty(mask)))=0A+ if (unlikely(cpumask_empty(m= ask)))=0A return 0;=0A =0A- if (!cpu_isset(cpu, mask))=0A- = cpu =3D first_cpu(mask);=0A+ if (!cpumask_test_cpu(cpu, mask))=0A+ = cpu =3D cpumask_first(mask);=0A if (cpu >=3D NR_CPUS || !cpu_online= (cpu))=0A return 0;=0A =0A@@ -232,7 +231,7 @@ static u32 get_cur_va= l(cpumask_t mask)=0A return 0;=0A }=0A =0A- cmd.mask =3D = cpumask_of_cpu(cpu);=0A+ cmd.mask =3D cpumask_of(cpu);=0A =0A = drv_read(&cmd);=0A return cmd.val;=0A@@ -378,7 +377,7 @@ static = unsigned int get_cur_freq_on_cpu(=0A data->acpi_data =3D=3D NULL = || data->freq_table =3D=3D NULL))=0A return 0;=0A =0A- freq =3D = extract_freq(get_cur_val(cpumask_of_cpu(cpu)), data);=0A+ freq =3D = extract_freq(get_cur_val(cpumask_of(cpu)), data);=0A return freq;=0A = }=0A =0A@@ -402,7 +401,7 @@ static void feature_detect(void *info)=0A = }=0A }=0A =0A-static unsigned int check_freqs(cpumask_t mask, unsigned int = freq,=0A+static unsigned int check_freqs(const cpumask_t *mask, unsigned = int freq,=0A struct acpi_cpufreq_data = *data)=0A {=0A unsigned int cur_freq;=0A@@ -473,12 +472,10 @@ static = int acpi_cpufreq_target(struct cp=0A return -ENODEV;=0A }=0A = =0A- cpus_clear(cmd.mask);=0A-=0A if (policy->shared_type !=3D = CPUFREQ_SHARED_TYPE_ANY)=0A- cmd.mask =3D online_policy_cpus;=0A+ = cmd.mask =3D &online_policy_cpus;=0A else=0A- cpu_set(polic= y->cpu, cmd.mask);=0A+ cmd.mask =3D cpumask_of(policy->cpu);=0A =0A = freqs.old =3D perf->states[perf->state].core_frequency * 1000;=0A = freqs.new =3D data->freq_table[next_state].frequency;=0A--- 2010-06-15.orig= /xen/arch/x86/acpi/cpufreq/powernow.c 2010-07-06 16:46:52.000000000 = +0200=0A+++ 2010-06-15/xen/arch/x86/acpi/cpufreq/powernow.c 2010-07-06 = 16:12:49.000000000 +0200=0A@@ -66,7 +66,7 @@ static struct cpufreq_driver = powernow_cp=0A =0A struct drv_cmd {=0A unsigned int type;=0A- = cpumask_t mask;=0A+ const cpumask_t *mask;=0A u32 val;=0A int = turbo;=0A };=0A@@ -124,12 +124,10 @@ static int powernow_cpufreq_target(str= uc=0A return 0;=0A }=0A =0A- cpus_clear(cmd.mask);=0A-= =0A if (policy->shared_type !=3D CPUFREQ_SHARED_TYPE_ANY)=0A- = cmd.mask =3D online_policy_cpus;=0A+ cmd.mask =3D &online_policy_cpu= s;=0A else=0A- cpu_set(policy->cpu, cmd.mask);=0A+ = cmd.mask =3D cpumask_of(policy->cpu);=0A =0A freqs.old =3D perf->states= [perf->state].core_frequency * 1000;=0A freqs.new =3D data->freq_table[= next_state].frequency;=0A@@ -137,7 +135,7 @@ static int powernow_cpufreq_ta= rget(struc=0A cmd.val =3D next_perf_state;=0A cmd.turbo =3D = policy->turbo;=0A =0A- on_selected_cpus(&cmd.mask, transition_pstate, = &cmd, 1);=0A+ on_selected_cpus(cmd.mask, transition_pstate, &cmd, = 1);=0A =0A for_each_cpu_mask(j, online_policy_cpus)=0A = cpufreq_statistic_update(j, perf->state, next_perf_state);=0A--- 2010-06-15= .orig/xen/arch/x86/hpet.c 2010-07-06 16:46:52.000000000 +0200=0A+++ = 2010-06-15/xen/arch/x86/hpet.c 2010-07-06 16:12:49.000000000 +0200=0A@@ = -198,7 +198,7 @@ again:=0A {=0A write_lock_irq(&ch->cpumask_loc= k);=0A =0A- if ( cpumask_test_cpu(cpu, ch->cpumask) )=0A+ if = ( cpu_isset(cpu, ch->cpumask) )=0A {=0A if ( per_cpu(ti= mer_deadline_start, cpu) <=3D now )=0A cpu_set(cpu, = mask);=0A--- 2010-06-15.orig/xen/arch/x86/io_apic.c 2010-07-06 = 16:46:52.000000000 +0200=0A+++ 2010-06-15/xen/arch/x86/io_apic.c = 2010-07-06 16:12:49.000000000 +0200=0A@@ -460,7 +460,7 @@ void irq_complete= _move(struct irq_desc *=0A vector =3D get_irq_regs()->entry_vector;=0A = me =3D smp_processor_id();=0A =0A- if (vector =3D=3D cfg->vector && = cpumask_test_cpu(me, cfg->domain))=0A+ if (vector =3D=3D cfg->vector && = cpu_isset(me, cfg->domain))=0A send_cleanup_vector(cfg);=0A }=0A = =0A--- 2010-06-15.orig/xen/include/xen/cpumask.h 2010-07-06 = 16:46:52.000000000 +0200=0A+++ 2010-06-15/xen/include/xen/cpumask.h = 2010-07-06 16:12:49.000000000 +0200=0A@@ -106,6 +106,7 @@ static inline = void __cpus_clear(cpumask_=0A }=0A =0A /* No static inline type checking - = see Subtlety (1) above. */=0A+#define cpumask_test_cpu(cpu, cpumask) = test_bit(cpu, (cpumask)->bits)=0A #define cpu_isset(cpu, cpumask) = test_bit((cpu), (cpumask).bits)=0A =0A #define cpu_test_and_set(cpu, = cpumask) __cpu_test_and_set((cpu), &(cpumask))=0A@@ -114,16 +115,6 @@ = static inline int __cpu_test_and_set(int=0A return test_and_set_bit(cpu= , addr->bits);=0A }=0A =0A-/**=0A- * cpumask_test_cpu - test for a cpu in = a cpumask=0A- */=0A-#define cpumask_test_cpu(cpu, cpumask) __cpu_test((cpu)= , &(cpumask))=0A-=0A-static inline int __cpu_test(int cpu, cpumask_t = *addr)=0A-{=0A- return test_bit(cpu, addr->bits);=0A-}=0A-=0A #define = cpu_test_and_clear(cpu, cpumask) __cpu_test_and_clear((cpu), &(cpumask))=0A= static inline int __cpu_test_and_clear(int cpu, cpumask_t *addr)=0A = {=0A@@ -166,6 +157,7 @@ static inline void __cpus_complement(cpu=0A = bitmap_complement(dstp->bits, srcp->bits, nbits);=0A }=0A =0A+#define = cpumask_equal(src1, src2) __cpus_equal(src1, src2, NR_CPUS)=0A #define = cpus_equal(src1, src2) __cpus_equal(&(src1), &(src2), NR_CPUS)=0A static = inline int __cpus_equal(const cpumask_t *src1p,=0A = const cpumask_t *src2p, int nbits)=0A@@ -187,6 +179,7 @@ static = inline int __cpus_subset(const cp=0A return bitmap_subset(src1p->bits, = src2p->bits, nbits);=0A }=0A =0A+#define cpumask_empty(src) __cpus_empty(sr= c, NR_CPUS)=0A #define cpus_empty(src) __cpus_empty(&(src), NR_CPUS)=0A = static inline int __cpus_empty(const cpumask_t *srcp, int nbits)=0A {=0A@@ = -227,18 +220,21 @@ static inline void __cpus_shift_left(cpu=0A bitmap_shif= t_left(dstp->bits, srcp->bits, n, nbits);=0A }=0A =0A+#define cpumask_first= (src) __first_cpu(src, NR_CPUS)=0A #define first_cpu(src) __first_cpu(&(src= ), NR_CPUS)=0A static inline int __first_cpu(const cpumask_t *srcp, int = nbits)=0A {=0A return min_t(int, nbits, find_first_bit(srcp->bits, = nbits));=0A }=0A =0A+#define cpumask_next(n, src) __next_cpu(n, src, = NR_CPUS)=0A #define next_cpu(n, src) __next_cpu((n), &(src), NR_CPUS)=0A = static inline int __next_cpu(int n, const cpumask_t *srcp, int nbits)=0A = {=0A return min_t(int, nbits, find_next_bit(srcp->bits, nbits, = n+1));=0A }=0A =0A+#define cpumask_last(src) __last_cpu(src, NR_CPUS)=0A = #define last_cpu(src) __last_cpu(&(src), NR_CPUS)=0A static inline int = __last_cpu(const cpumask_t *srcp, int nbits)=0A {=0A@@ -250,6 +246,7 @@ = static inline int __last_cpu(const cpuma=0A return pcpu;=0A }=0A = =0A+#define cpumask_cycle(n, src) __cycle_cpu(n, src, NR_CPUS)=0A #define = cycle_cpu(n, src) __cycle_cpu((n), &(src), NR_CPUS)=0A static inline int = __cycle_cpu(int n, const cpumask_t *srcp, int nbits)=0A {=0A --=__PartB598CE7D.0__= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=__PartB598CE7D.0__=--