linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups
@ 2015-07-18  1:13 Rafael J. Wysocki
  2015-07-18  1:14 ` [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-18  1:13 UTC (permalink / raw)
  To: Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	Pan Xinhui

Hi,

The following two patches clean up a couple of things in the ACPI processor
driver and the ACPI cpufreq driver:

[1/2] Drop the unused first argument of acpi_processor_unregister_performance().
[2/2] Drop the now redundant acpi_data pointer from acpi_cpufreq_data.

Both patches on top of the current linux-next branch of the linux-pm.git tree.

Thanks!


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine
  2015-07-18  1:13 [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Rafael J. Wysocki
@ 2015-07-18  1:14 ` Rafael J. Wysocki
  2015-07-20  1:45   ` Pan Xinhui
  2015-07-18  1:16 ` [PATCH 2/2] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data Rafael J. Wysocki
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-18  1:14 UTC (permalink / raw)
  To: Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	Pan Xinhui

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

acpi_processor_unregister_performance() actually doesn't use its
first argument, so drop it and update the callers accordingly.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/processor_perflib.c    |    4 +---
 drivers/cpufreq/acpi-cpufreq.c      |    5 ++---
 drivers/cpufreq/e_powersaver.c      |    2 +-
 drivers/cpufreq/ia64-acpi-cpufreq.c |    5 ++---
 drivers/cpufreq/powernow-k7.c       |    4 ++--
 drivers/cpufreq/powernow-k8.c       |    5 ++---
 drivers/xen/xen-acpi-processor.c    |    4 ++--
 include/acpi/processor.h            |    5 +----
 8 files changed, 13 insertions(+), 21 deletions(-)

Index: linux-pm/drivers/acpi/processor_perflib.c
===================================================================
--- linux-pm.orig/drivers/acpi/processor_perflib.c
+++ linux-pm/drivers/acpi/processor_perflib.c
@@ -780,9 +780,7 @@ acpi_processor_register_performance(stru
 
 EXPORT_SYMBOL(acpi_processor_register_performance);
 
-void
-acpi_processor_unregister_performance(struct acpi_processor_performance
-				      *performance, unsigned int cpu)
+void acpi_processor_unregister_performance(unsigned int cpu)
 {
 	struct acpi_processor *pr;
 
Index: linux-pm/include/acpi/processor.h
===================================================================
--- linux-pm.orig/include/acpi/processor.h
+++ linux-pm/include/acpi/processor.h
@@ -228,10 +228,7 @@ extern int acpi_processor_preregister_pe
 
 extern int acpi_processor_register_performance(struct acpi_processor_performance
 					       *performance, unsigned int cpu);
-extern void acpi_processor_unregister_performance(struct
-						  acpi_processor_performance
-						  *performance,
-						  unsigned int cpu);
+extern void acpi_processor_unregister_performance(unsigned int cpu);
 
 /* note: this locks both the calling module and the processor module
          if a _PPC object exists, rmmod is disallowed then */
Index: linux-pm/drivers/cpufreq/acpi-cpufreq.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/acpi-cpufreq.c
+++ linux-pm/drivers/cpufreq/acpi-cpufreq.c
@@ -842,7 +842,7 @@ static int acpi_cpufreq_cpu_init(struct
 err_freqfree:
 	kfree(data->freq_table);
 err_unreg:
-	acpi_processor_unregister_performance(perf, cpu);
+	acpi_processor_unregister_performance(cpu);
 err_free_mask:
 	free_cpumask_var(data->freqdomain_cpus);
 err_free:
@@ -860,8 +860,7 @@ static int acpi_cpufreq_cpu_exit(struct
 
 	if (data) {
 		policy->driver_data = NULL;
-		acpi_processor_unregister_performance(data->acpi_data,
-						      data->acpi_perf_cpu);
+		acpi_processor_unregister_performance(data->acpi_perf_cpu);
 		free_cpumask_var(data->freqdomain_cpus);
 		kfree(data->freq_table);
 		kfree(data);
Index: linux-pm/drivers/cpufreq/e_powersaver.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/e_powersaver.c
+++ linux-pm/drivers/cpufreq/e_powersaver.c
@@ -78,7 +78,7 @@ static int eps_acpi_init(void)
 static int eps_acpi_exit(struct cpufreq_policy *policy)
 {
 	if (eps_acpi_cpu_perf) {
-		acpi_processor_unregister_performance(eps_acpi_cpu_perf, 0);
+		acpi_processor_unregister_performance(0);
 		free_cpumask_var(eps_acpi_cpu_perf->shared_cpu_map);
 		kfree(eps_acpi_cpu_perf);
 		eps_acpi_cpu_perf = NULL;
Index: linux-pm/drivers/cpufreq/ia64-acpi-cpufreq.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/ia64-acpi-cpufreq.c
+++ linux-pm/drivers/cpufreq/ia64-acpi-cpufreq.c
@@ -313,7 +313,7 @@ acpi_cpufreq_cpu_init (
  err_freqfree:
 	kfree(data->freq_table);
  err_unreg:
-	acpi_processor_unregister_performance(&data->acpi_data, cpu);
+	acpi_processor_unregister_performance(cpu);
  err_free:
 	kfree(data);
 	acpi_io_data[cpu] = NULL;
@@ -332,8 +332,7 @@ acpi_cpufreq_cpu_exit (
 
 	if (data) {
 		acpi_io_data[policy->cpu] = NULL;
-		acpi_processor_unregister_performance(&data->acpi_data,
-		                                      policy->cpu);
+		acpi_processor_unregister_performance(policy->cpu);
 		kfree(data);
 	}
 
Index: linux-pm/drivers/cpufreq/powernow-k7.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/powernow-k7.c
+++ linux-pm/drivers/cpufreq/powernow-k7.c
@@ -421,7 +421,7 @@ static int powernow_acpi_init(void)
 	return 0;
 
 err2:
-	acpi_processor_unregister_performance(acpi_processor_perf, 0);
+	acpi_processor_unregister_performance(0);
 err1:
 	free_cpumask_var(acpi_processor_perf->shared_cpu_map);
 err05:
@@ -661,7 +661,7 @@ static int powernow_cpu_exit(struct cpuf
 {
 #ifdef CONFIG_X86_POWERNOW_K7_ACPI
 	if (acpi_processor_perf) {
-		acpi_processor_unregister_performance(acpi_processor_perf, 0);
+		acpi_processor_unregister_performance(0);
 		free_cpumask_var(acpi_processor_perf->shared_cpu_map);
 		kfree(acpi_processor_perf);
 	}
Index: linux-pm/drivers/cpufreq/powernow-k8.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/powernow-k8.c
+++ linux-pm/drivers/cpufreq/powernow-k8.c
@@ -795,7 +795,7 @@ err_out_mem:
 	kfree(powernow_table);
 
 err_out:
-	acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
+	acpi_processor_unregister_performance(data->cpu);
 
 	/* data->acpi_data.state_count informs us at ->exit()
 	 * whether ACPI was used */
@@ -863,8 +863,7 @@ static int fill_powernow_table_fidvid(st
 static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data)
 {
 	if (data->acpi_data.state_count)
-		acpi_processor_unregister_performance(&data->acpi_data,
-				data->cpu);
+		acpi_processor_unregister_performance(data->cpu);
 	free_cpumask_var(data->acpi_data.shared_cpu_map);
 }
 
Index: linux-pm/drivers/xen/xen-acpi-processor.c
===================================================================
--- linux-pm.orig/drivers/xen/xen-acpi-processor.c
+++ linux-pm/drivers/xen/xen-acpi-processor.c
@@ -563,7 +563,7 @@ err_unregister:
 	for_each_possible_cpu(i) {
 		struct acpi_processor_performance *perf;
 		perf = per_cpu_ptr(acpi_perf_data, i);
-		acpi_processor_unregister_performance(perf, i);
+		acpi_processor_unregister_performance(i);
 	}
 err_out:
 	/* Freeing a NULL pointer is OK: alloc_percpu zeroes. */
@@ -582,7 +582,7 @@ static void __exit xen_acpi_processor_ex
 	for_each_possible_cpu(i) {
 		struct acpi_processor_performance *perf;
 		perf = per_cpu_ptr(acpi_perf_data, i);
-		acpi_processor_unregister_performance(perf, i);
+		acpi_processor_unregister_performance(i);
 	}
 	free_acpi_perf_data();
 }

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 2/2] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data
  2015-07-18  1:13 [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Rafael J. Wysocki
  2015-07-18  1:14 ` [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
@ 2015-07-18  1:16 ` Rafael J. Wysocki
  2015-07-18  6:04 ` [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Viresh Kumar
  2015-07-20 22:12 ` [PATCH v2 0/3] " Rafael J. Wysocki
  3 siblings, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-18  1:16 UTC (permalink / raw)
  To: Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	Pan Xinhui

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

After commit 8cfcfd39000d (acpi-cpufreq: Fix an ACPI perf unregister
issue) we store both a pointer to per-CPU data of the first policy
CPU and the number of that CPU which are redundant.

Since the CPU number has to be stored anyway for the unregistration,
the pointer to the CPU's per-CPU data may be dropped and we can
access the data in question via per_cpu_ptr().

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/cpufreq/acpi-cpufreq.c |   26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

Index: linux-pm/drivers/cpufreq/acpi-cpufreq.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/acpi-cpufreq.c
+++ linux-pm/drivers/cpufreq/acpi-cpufreq.c
@@ -65,7 +65,6 @@ enum {
 #define MSR_K7_HWCR_CPB_DIS	(1ULL << 25)
 
 struct acpi_cpufreq_data {
-	struct acpi_processor_performance *acpi_data;
 	struct cpufreq_frequency_table *freq_table;
 	unsigned int resume;
 	unsigned int cpu_feature;
@@ -201,7 +200,7 @@ static unsigned extract_io(u32 value, st
 	struct acpi_processor_performance *perf;
 	int i;
 
-	perf = data->acpi_data;
+	perf = per_cpu_ptr(acpi_perf_data, data->acpi_perf_cpu);
 
 	for (i = 0; i < perf->state_count; i++) {
 		if (value == perf->states[i].status)
@@ -220,7 +219,7 @@ static unsigned extract_msr(u32 msr, str
 	else
 		msr &= INTEL_MSR_RANGE;
 
-	perf = data->acpi_data;
+	perf = per_cpu_ptr(acpi_perf_data, data->acpi_perf_cpu);
 
 	cpufreq_for_each_entry(pos, data->freq_table)
 		if (msr == perf->states[pos->driver_data].status)
@@ -346,7 +345,7 @@ get_cur_val(const struct cpumask *mask,
 		break;
 	case SYSTEM_IO_CAPABLE:
 		cmd.type = SYSTEM_IO_CAPABLE;
-		perf = data->acpi_data;
+		perf = per_cpu_ptr(acpi_perf_data, data->acpi_perf_cpu);
 		cmd.addr.io.port = perf->control_register.address;
 		cmd.addr.io.bit_width = perf->control_register.bit_width;
 		break;
@@ -364,6 +363,7 @@ get_cur_val(const struct cpumask *mask,
 
 static unsigned int get_cur_freq_on_cpu(unsigned int cpu)
 {
+	struct acpi_processor_performance *perf;
 	struct acpi_cpufreq_data *data;
 	struct cpufreq_policy *policy;
 	unsigned int freq;
@@ -377,10 +377,11 @@ static unsigned int get_cur_freq_on_cpu(
 
 	data = policy->driver_data;
 	cpufreq_cpu_put(policy);
-	if (unlikely(!data || !data->acpi_data || !data->freq_table))
+	if (unlikely(!data || !data->freq_table))
 		return 0;
 
-	cached_freq = data->freq_table[data->acpi_data->state].frequency;
+	perf = per_cpu_ptr(acpi_perf_data, data->acpi_perf_cpu);
+	cached_freq = data->freq_table[perf->state].frequency;
 	freq = extract_freq(get_cur_val(cpumask_of(cpu), data), data);
 	if (freq != cached_freq) {
 		/*
@@ -419,12 +420,11 @@ static int acpi_cpufreq_target(struct cp
 	unsigned int next_perf_state = 0; /* Index into perf table */
 	int result = 0;
 
-	if (unlikely(data == NULL ||
-	     data->acpi_data == NULL || data->freq_table == NULL)) {
+	if (unlikely(data == NULL || data->freq_table == NULL)) {
 		return -ENODEV;
 	}
 
-	perf = data->acpi_data;
+	perf = per_cpu_ptr(acpi_perf_data, data->acpi_perf_cpu);
 	next_perf_state = data->freq_table[index].driver_data;
 	if (perf->state == next_perf_state) {
 		if (unlikely(data->resume)) {
@@ -487,8 +487,9 @@ out:
 static unsigned long
 acpi_cpufreq_guess_freq(struct acpi_cpufreq_data *data, unsigned int cpu)
 {
-	struct acpi_processor_performance *perf = data->acpi_data;
+	struct acpi_processor_performance *perf;
 
+	perf = per_cpu_ptr(acpi_perf_data, data->acpi_perf_cpu);
 	if (cpu_khz) {
 		/* search the closest match to cpu_khz */
 		unsigned int i;
@@ -677,18 +678,17 @@ static int acpi_cpufreq_cpu_init(struct
 		goto err_free;
 	}
 
-	data->acpi_data = per_cpu_ptr(acpi_perf_data, cpu);
+	perf = per_cpu_ptr(acpi_perf_data, cpu);
 	data->acpi_perf_cpu = cpu;
 	policy->driver_data = data;
 
 	if (cpu_has(c, X86_FEATURE_CONSTANT_TSC))
 		acpi_cpufreq_driver.flags |= CPUFREQ_CONST_LOOPS;
 
-	result = acpi_processor_register_performance(data->acpi_data, cpu);
+	result = acpi_processor_register_performance(perf, cpu);
 	if (result)
 		goto err_free_mask;
 
-	perf = data->acpi_data;
 	policy->shared_type = perf->shared_type;
 
 	/*


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups
  2015-07-18  1:13 [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Rafael J. Wysocki
  2015-07-18  1:14 ` [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
  2015-07-18  1:16 ` [PATCH 2/2] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data Rafael J. Wysocki
@ 2015-07-18  6:04 ` Viresh Kumar
  2015-07-20 22:40   ` Rafael J. Wysocki
  2015-07-20 22:12 ` [PATCH v2 0/3] " Rafael J. Wysocki
  3 siblings, 1 reply; 12+ messages in thread
From: Viresh Kumar @ 2015-07-18  6:04 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux PM list, ACPI Devel Maling List, Linux Kernel Mailing List,
	Pan Xinhui

On 18-07-15, 03:13, Rafael J. Wysocki wrote:
> Hi,
> 
> The following two patches clean up a couple of things in the ACPI processor
> driver and the ACPI cpufreq driver:
> 
> [1/2] Drop the unused first argument of acpi_processor_unregister_performance().
> [2/2] Drop the now redundant acpi_data pointer from acpi_cpufreq_data.
> 
> Both patches on top of the current linux-next branch of the linux-pm.git tree.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

-- 
viresh

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine
  2015-07-18  1:14 ` [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
@ 2015-07-20  1:45   ` Pan Xinhui
  2015-07-20 21:49     ` Rafael J. Wysocki
  0 siblings, 1 reply; 12+ messages in thread
From: Pan Xinhui @ 2015-07-20  1:45 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	yanmin_zhang@linux.intel.com

hi, Rafael
	thanks for your nice work :)
On 2015年07月18日 09:14, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> acpi_processor_unregister_performance() actually doesn't use its
> first argument, so drop it and update the callers accordingly.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>  drivers/acpi/processor_perflib.c    |    4 +---
>  drivers/cpufreq/acpi-cpufreq.c      |    5 ++---
>  drivers/cpufreq/e_powersaver.c      |    2 +-
>  drivers/cpufreq/ia64-acpi-cpufreq.c |    5 ++---
>  drivers/cpufreq/powernow-k7.c       |    4 ++--
>  drivers/cpufreq/powernow-k8.c       |    5 ++---
>  drivers/xen/xen-acpi-processor.c    |    4 ++--
>  include/acpi/processor.h            |    5 +----
>  8 files changed, 13 insertions(+), 21 deletions(-)
> 

I wish I can test this patch. However I only have x86 hardware, not all codes can be tested on my side.

> Index: linux-pm/drivers/xen/xen-acpi-processor.c
> ===================================================================
> --- linux-pm.orig/drivers/xen/xen-acpi-processor.c
> +++ linux-pm/drivers/xen/xen-acpi-processor.c
> @@ -563,7 +563,7 @@ err_unregister:
>  	for_each_possible_cpu(i) {
>  		struct acpi_processor_performance *perf;
>  		perf = per_cpu_ptr(acpi_perf_data, i);
> -		acpi_processor_unregister_performance(perf, i);
> +		acpi_processor_unregister_performance(i);
>  	}
>  err_out:
>  	/* Freeing a NULL pointer is OK: alloc_percpu zeroes. */
> @@ -582,7 +582,7 @@ static void __exit xen_acpi_processor_ex
>  	for_each_possible_cpu(i) {
>  		struct acpi_processor_performance *perf;
>  		perf = per_cpu_ptr(acpi_perf_data, i);
> -		acpi_processor_unregister_performance(perf, i);
> +		acpi_processor_unregister_performance(i);


>  	}
>  	free_acpi_perf_data();
>  }
> 

After a simple review, in functions above *perf* is not used anymore, can we just change the codes like below
	@@ -580,9 +580,7 @@ static void __exit xen_acpi_processor_exit(void)
        kfree(acpi_id_present);
        kfree(acpi_id_cst_present);
        for_each_possible_cpu(i) {
-               struct acpi_processor_performance *perf;
-               perf = per_cpu_ptr(acpi_perf_data, i);
-               acpi_processor_unregister_performance(perf, i);
+               acpi_processor_unregister_performance(i);
        }
        free_acpi_perf_data();

thanks
xinhui
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine
  2015-07-20  1:45   ` Pan Xinhui
@ 2015-07-20 21:49     ` Rafael J. Wysocki
  0 siblings, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-20 21:49 UTC (permalink / raw)
  To: Pan Xinhui
  Cc: Linux PM list, ACPI Devel Maling List, Linux Kernel Mailing List,
	Viresh Kumar, yanmin_zhang@linux.intel.com

On Monday, July 20, 2015 09:45:30 AM Pan Xinhui wrote:
> hi, Rafael
> 	thanks for your nice work :)
> On 2015年07月18日 09:14, Rafael J. Wysocki wrote:
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > 
> > acpi_processor_unregister_performance() actually doesn't use its
> > first argument, so drop it and update the callers accordingly.
> > 
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > ---
> >  drivers/acpi/processor_perflib.c    |    4 +---
> >  drivers/cpufreq/acpi-cpufreq.c      |    5 ++---
> >  drivers/cpufreq/e_powersaver.c      |    2 +-
> >  drivers/cpufreq/ia64-acpi-cpufreq.c |    5 ++---
> >  drivers/cpufreq/powernow-k7.c       |    4 ++--
> >  drivers/cpufreq/powernow-k8.c       |    5 ++---
> >  drivers/xen/xen-acpi-processor.c    |    4 ++--
> >  include/acpi/processor.h            |    5 +----
> >  8 files changed, 13 insertions(+), 21 deletions(-)
> > 
> 
> I wish I can test this patch. However I only have x86 hardware, not all
> codes can be tested on my side.

Possible build errors should be sorted out by the 0-day testing and the
functional part will be OK if the name of the remaining argument is not
changed in any spot.


> > Index: linux-pm/drivers/xen/xen-acpi-processor.c
> > ===================================================================
> > --- linux-pm.orig/drivers/xen/xen-acpi-processor.c
> > +++ linux-pm/drivers/xen/xen-acpi-processor.c
> > @@ -563,7 +563,7 @@ err_unregister:
> >  	for_each_possible_cpu(i) {
> >  		struct acpi_processor_performance *perf;
> >  		perf = per_cpu_ptr(acpi_perf_data, i);
> > -		acpi_processor_unregister_performance(perf, i);
> > +		acpi_processor_unregister_performance(i);
> >  	}
> >  err_out:
> >  	/* Freeing a NULL pointer is OK: alloc_percpu zeroes. */
> > @@ -582,7 +582,7 @@ static void __exit xen_acpi_processor_ex
> >  	for_each_possible_cpu(i) {
> >  		struct acpi_processor_performance *perf;
> >  		perf = per_cpu_ptr(acpi_perf_data, i);
> > -		acpi_processor_unregister_performance(perf, i);
> > +		acpi_processor_unregister_performance(i);
> 
> 
> >  	}
> >  	free_acpi_perf_data();
> >  }
> > 
> 
> After a simple review, in functions above *perf* is not used anymore, can we just change the codes like below
> 	@@ -580,9 +580,7 @@ static void __exit xen_acpi_processor_exit(void)
>         kfree(acpi_id_present);
>         kfree(acpi_id_cst_present);
>         for_each_possible_cpu(i) {
> -               struct acpi_processor_performance *perf;
> -               perf = per_cpu_ptr(acpi_perf_data, i);
> -               acpi_processor_unregister_performance(perf, i);
> +               acpi_processor_unregister_performance(i);
>         }
>         free_acpi_perf_data();

You're right, thanks!

I'll send an update shortly.


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 0/3] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups
  2015-07-18  1:13 [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Rafael J. Wysocki
                   ` (2 preceding siblings ...)
  2015-07-18  6:04 ` [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Viresh Kumar
@ 2015-07-20 22:12 ` Rafael J. Wysocki
  2015-07-20 22:13   ` [PATCH v2 1/3] cpufreq: acpi-cpufreq: Fix up the handling of the cpb sysfs attribute Rafael J. Wysocki
                     ` (3 more replies)
  3 siblings, 4 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-20 22:12 UTC (permalink / raw)
  To: Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	Pan Xinhui

On Saturday, July 18, 2015 03:13:41 AM Rafael J. Wysocki wrote:
> Hi,
> 
> The following two patches clean up a couple of things in the ACPI processor
> driver and the ACPI cpufreq driver:
> 
> [1/2] Drop the unused first argument of acpi_processor_unregister_performance().
> [2/2] Drop the now redundant acpi_data pointer from acpi_cpufreq_data.

New versios of the two above (as [2/3] and [3/3], respectively) plus one
more ACPI cpufreq driver cleanup (discussed on linux-pm previously).

Thanks!


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/3] cpufreq: acpi-cpufreq: Fix up the handling of the cpb sysfs attribute
  2015-07-20 22:12 ` [PATCH v2 0/3] " Rafael J. Wysocki
@ 2015-07-20 22:13   ` Rafael J. Wysocki
  2015-07-20 22:14   ` [PATCH v2 2/3] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-20 22:13 UTC (permalink / raw)
  To: Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	Pan Xinhui

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

The cpb sysfs attribute is only exposed by the ACPI cpufreq driver
after a runtime check.  For this purpose, the driver keeps a NULL
placeholder in its table of sysfs attributes and replaces the NULL
with a pointer to an attribute structure if it decides to expose
cpb.

That is confusing, so make the driver set a pointer to the cpb
attribute structure upfront and replace it with NULL if the
attribute should not be exposed instead.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/cpufreq/acpi-cpufreq.c |   21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

Index: linux-pm/drivers/cpufreq/acpi-cpufreq.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/acpi-cpufreq.c
+++ linux-pm/drivers/cpufreq/acpi-cpufreq.c
@@ -886,7 +886,9 @@ static int acpi_cpufreq_resume(struct cp
 static struct freq_attr *acpi_cpufreq_attr[] = {
 	&cpufreq_freq_attr_scaling_available_freqs,
 	&freqdomain_cpus,
-	NULL,	/* this is a placeholder for cpb, do not remove */
+#ifdef CONFIG_X86_ACPI_CPUFREQ_CPB
+	&cpb,
+#endif
 	NULL,
 };
 
@@ -959,17 +961,16 @@ static int __init acpi_cpufreq_init(void
 	 * only if configured. This is considered legacy code, which
 	 * will probably be removed at some point in the future.
 	 */
-	if (check_amd_hwpstate_cpu(0)) {
-		struct freq_attr **iter;
-
-		pr_debug("adding sysfs entry for cpb\n");
+	if (!check_amd_hwpstate_cpu(0)) {
+		struct freq_attr **attr;
 
-		for (iter = acpi_cpufreq_attr; *iter != NULL; iter++)
-			;
+		pr_debug("CPB unsupported, do not expose it\n");
 
-		/* make sure there is a terminator behind it */
-		if (iter[1] == NULL)
-			*iter = &cpb;
+		for (attr = acpi_cpufreq_attr; *attr; attr++)
+			if (*attr == &cpb) {
+				*attr = NULL;
+				break;
+			}
 	}
 #endif
 	acpi_cpufreq_boost_init();


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 2/3] ACPI / processor: Drop an unused argument of a cleanup routine
  2015-07-20 22:12 ` [PATCH v2 0/3] " Rafael J. Wysocki
  2015-07-20 22:13   ` [PATCH v2 1/3] cpufreq: acpi-cpufreq: Fix up the handling of the cpb sysfs attribute Rafael J. Wysocki
@ 2015-07-20 22:14   ` Rafael J. Wysocki
  2015-07-20 22:15   ` [PATCH v2 3/3] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data Rafael J. Wysocki
  2015-07-21  2:33   ` [PATCH v2 0/3] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Viresh Kumar
  3 siblings, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-20 22:14 UTC (permalink / raw)
  To: Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	Pan Xinhui

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

acpi_processor_unregister_performance() actually doesn't use its
first argument, so drop it and update the callers accordingly.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/processor_perflib.c    |    4 +---
 drivers/cpufreq/acpi-cpufreq.c      |    5 ++---
 drivers/cpufreq/e_powersaver.c      |    2 +-
 drivers/cpufreq/ia64-acpi-cpufreq.c |    5 ++---
 drivers/cpufreq/powernow-k7.c       |    4 ++--
 drivers/cpufreq/powernow-k8.c       |    5 ++---
 drivers/xen/xen-acpi-processor.c    |   16 ++++++----------
 include/acpi/processor.h            |    5 +----
 8 files changed, 17 insertions(+), 29 deletions(-)

Index: linux-pm/drivers/acpi/processor_perflib.c
===================================================================
--- linux-pm.orig/drivers/acpi/processor_perflib.c
+++ linux-pm/drivers/acpi/processor_perflib.c
@@ -780,9 +780,7 @@ acpi_processor_register_performance(stru
 
 EXPORT_SYMBOL(acpi_processor_register_performance);
 
-void
-acpi_processor_unregister_performance(struct acpi_processor_performance
-				      *performance, unsigned int cpu)
+void acpi_processor_unregister_performance(unsigned int cpu)
 {
 	struct acpi_processor *pr;
 
Index: linux-pm/include/acpi/processor.h
===================================================================
--- linux-pm.orig/include/acpi/processor.h
+++ linux-pm/include/acpi/processor.h
@@ -228,10 +228,7 @@ extern int acpi_processor_preregister_pe
 
 extern int acpi_processor_register_performance(struct acpi_processor_performance
 					       *performance, unsigned int cpu);
-extern void acpi_processor_unregister_performance(struct
-						  acpi_processor_performance
-						  *performance,
-						  unsigned int cpu);
+extern void acpi_processor_unregister_performance(unsigned int cpu);
 
 /* note: this locks both the calling module and the processor module
          if a _PPC object exists, rmmod is disallowed then */
Index: linux-pm/drivers/cpufreq/acpi-cpufreq.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/acpi-cpufreq.c
+++ linux-pm/drivers/cpufreq/acpi-cpufreq.c
@@ -844,7 +844,7 @@ static int acpi_cpufreq_cpu_init(struct
 err_freqfree:
 	kfree(data->freq_table);
 err_unreg:
-	acpi_processor_unregister_performance(perf, cpu);
+	acpi_processor_unregister_performance(cpu);
 err_free_mask:
 	free_cpumask_var(data->freqdomain_cpus);
 err_free:
@@ -862,8 +862,7 @@ static int acpi_cpufreq_cpu_exit(struct
 
 	if (data) {
 		policy->driver_data = NULL;
-		acpi_processor_unregister_performance(data->acpi_data,
-						      data->acpi_perf_cpu);
+		acpi_processor_unregister_performance(data->acpi_perf_cpu);
 		free_cpumask_var(data->freqdomain_cpus);
 		kfree(data->freq_table);
 		kfree(data);
Index: linux-pm/drivers/cpufreq/e_powersaver.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/e_powersaver.c
+++ linux-pm/drivers/cpufreq/e_powersaver.c
@@ -78,7 +78,7 @@ static int eps_acpi_init(void)
 static int eps_acpi_exit(struct cpufreq_policy *policy)
 {
 	if (eps_acpi_cpu_perf) {
-		acpi_processor_unregister_performance(eps_acpi_cpu_perf, 0);
+		acpi_processor_unregister_performance(0);
 		free_cpumask_var(eps_acpi_cpu_perf->shared_cpu_map);
 		kfree(eps_acpi_cpu_perf);
 		eps_acpi_cpu_perf = NULL;
Index: linux-pm/drivers/cpufreq/ia64-acpi-cpufreq.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/ia64-acpi-cpufreq.c
+++ linux-pm/drivers/cpufreq/ia64-acpi-cpufreq.c
@@ -313,7 +313,7 @@ acpi_cpufreq_cpu_init (
  err_freqfree:
 	kfree(data->freq_table);
  err_unreg:
-	acpi_processor_unregister_performance(&data->acpi_data, cpu);
+	acpi_processor_unregister_performance(cpu);
  err_free:
 	kfree(data);
 	acpi_io_data[cpu] = NULL;
@@ -332,8 +332,7 @@ acpi_cpufreq_cpu_exit (
 
 	if (data) {
 		acpi_io_data[policy->cpu] = NULL;
-		acpi_processor_unregister_performance(&data->acpi_data,
-		                                      policy->cpu);
+		acpi_processor_unregister_performance(policy->cpu);
 		kfree(data);
 	}
 
Index: linux-pm/drivers/cpufreq/powernow-k7.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/powernow-k7.c
+++ linux-pm/drivers/cpufreq/powernow-k7.c
@@ -421,7 +421,7 @@ static int powernow_acpi_init(void)
 	return 0;
 
 err2:
-	acpi_processor_unregister_performance(acpi_processor_perf, 0);
+	acpi_processor_unregister_performance(0);
 err1:
 	free_cpumask_var(acpi_processor_perf->shared_cpu_map);
 err05:
@@ -661,7 +661,7 @@ static int powernow_cpu_exit(struct cpuf
 {
 #ifdef CONFIG_X86_POWERNOW_K7_ACPI
 	if (acpi_processor_perf) {
-		acpi_processor_unregister_performance(acpi_processor_perf, 0);
+		acpi_processor_unregister_performance(0);
 		free_cpumask_var(acpi_processor_perf->shared_cpu_map);
 		kfree(acpi_processor_perf);
 	}
Index: linux-pm/drivers/cpufreq/powernow-k8.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/powernow-k8.c
+++ linux-pm/drivers/cpufreq/powernow-k8.c
@@ -795,7 +795,7 @@ err_out_mem:
 	kfree(powernow_table);
 
 err_out:
-	acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
+	acpi_processor_unregister_performance(data->cpu);
 
 	/* data->acpi_data.state_count informs us at ->exit()
 	 * whether ACPI was used */
@@ -863,8 +863,7 @@ static int fill_powernow_table_fidvid(st
 static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data)
 {
 	if (data->acpi_data.state_count)
-		acpi_processor_unregister_performance(&data->acpi_data,
-				data->cpu);
+		acpi_processor_unregister_performance(data->cpu);
 	free_cpumask_var(data->acpi_data.shared_cpu_map);
 }
 
Index: linux-pm/drivers/xen/xen-acpi-processor.c
===================================================================
--- linux-pm.orig/drivers/xen/xen-acpi-processor.c
+++ linux-pm/drivers/xen/xen-acpi-processor.c
@@ -560,11 +560,9 @@ static int __init xen_acpi_processor_ini
 
 	return 0;
 err_unregister:
-	for_each_possible_cpu(i) {
-		struct acpi_processor_performance *perf;
-		perf = per_cpu_ptr(acpi_perf_data, i);
-		acpi_processor_unregister_performance(perf, i);
-	}
+	for_each_possible_cpu(i)
+		acpi_processor_unregister_performance(i);
+
 err_out:
 	/* Freeing a NULL pointer is OK: alloc_percpu zeroes. */
 	free_acpi_perf_data();
@@ -579,11 +577,9 @@ static void __exit xen_acpi_processor_ex
 	kfree(acpi_ids_done);
 	kfree(acpi_id_present);
 	kfree(acpi_id_cst_present);
-	for_each_possible_cpu(i) {
-		struct acpi_processor_performance *perf;
-		perf = per_cpu_ptr(acpi_perf_data, i);
-		acpi_processor_unregister_performance(perf, i);
-	}
+	for_each_possible_cpu(i)
+		acpi_processor_unregister_performance(i);
+
 	free_acpi_perf_data();
 }
 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 3/3] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data
  2015-07-20 22:12 ` [PATCH v2 0/3] " Rafael J. Wysocki
  2015-07-20 22:13   ` [PATCH v2 1/3] cpufreq: acpi-cpufreq: Fix up the handling of the cpb sysfs attribute Rafael J. Wysocki
  2015-07-20 22:14   ` [PATCH v2 2/3] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
@ 2015-07-20 22:15   ` Rafael J. Wysocki
  2015-07-21  2:33   ` [PATCH v2 0/3] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Viresh Kumar
  3 siblings, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-20 22:15 UTC (permalink / raw)
  To: Linux PM list
  Cc: ACPI Devel Maling List, Linux Kernel Mailing List, Viresh Kumar,
	Pan Xinhui

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

After commit 8cfcfd39000d (acpi-cpufreq: Fix an ACPI perf unregister
issue) we store both a pointer to per-CPU data of the first policy
CPU and the number of that CPU which are redundant.

Since the CPU number has to be stored anyway for the unregistration,
the pointer to the CPU's per-CPU data may be dropped and we can
access the data in question via per_cpu_ptr().

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/cpufreq/acpi-cpufreq.c |   29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

Index: linux-pm/drivers/cpufreq/acpi-cpufreq.c
===================================================================
--- linux-pm.orig/drivers/cpufreq/acpi-cpufreq.c
+++ linux-pm/drivers/cpufreq/acpi-cpufreq.c
@@ -65,7 +65,6 @@ enum {
 #define MSR_K7_HWCR_CPB_DIS	(1ULL << 25)
 
 struct acpi_cpufreq_data {
-	struct acpi_processor_performance *acpi_data;
 	struct cpufreq_frequency_table *freq_table;
 	unsigned int resume;
 	unsigned int cpu_feature;
@@ -76,6 +75,11 @@ struct acpi_cpufreq_data {
 /* acpi_perf_data is a pointer to percpu data. */
 static struct acpi_processor_performance __percpu *acpi_perf_data;
 
+static inline struct acpi_processor_performance *to_perf_data(struct acpi_cpufreq_data *data)
+{
+	return per_cpu_ptr(acpi_perf_data, data->acpi_perf_cpu);
+}
+
 static struct cpufreq_driver acpi_cpufreq_driver;
 
 static unsigned int acpi_pstate_strict;
@@ -201,7 +205,7 @@ static unsigned extract_io(u32 value, st
 	struct acpi_processor_performance *perf;
 	int i;
 
-	perf = data->acpi_data;
+	perf = to_perf_data(data);
 
 	for (i = 0; i < perf->state_count; i++) {
 		if (value == perf->states[i].status)
@@ -220,7 +224,7 @@ static unsigned extract_msr(u32 msr, str
 	else
 		msr &= INTEL_MSR_RANGE;
 
-	perf = data->acpi_data;
+	perf = to_perf_data(data);
 
 	cpufreq_for_each_entry(pos, data->freq_table)
 		if (msr == perf->states[pos->driver_data].status)
@@ -346,7 +350,7 @@ get_cur_val(const struct cpumask *mask,
 		break;
 	case SYSTEM_IO_CAPABLE:
 		cmd.type = SYSTEM_IO_CAPABLE;
-		perf = data->acpi_data;
+		perf = to_perf_data(data);
 		cmd.addr.io.port = perf->control_register.address;
 		cmd.addr.io.bit_width = perf->control_register.bit_width;
 		break;
@@ -377,10 +381,10 @@ static unsigned int get_cur_freq_on_cpu(
 
 	data = policy->driver_data;
 	cpufreq_cpu_put(policy);
-	if (unlikely(!data || !data->acpi_data || !data->freq_table))
+	if (unlikely(!data || !data->freq_table))
 		return 0;
 
-	cached_freq = data->freq_table[data->acpi_data->state].frequency;
+	cached_freq = data->freq_table[to_perf_data(data)->state].frequency;
 	freq = extract_freq(get_cur_val(cpumask_of(cpu), data), data);
 	if (freq != cached_freq) {
 		/*
@@ -419,12 +423,11 @@ static int acpi_cpufreq_target(struct cp
 	unsigned int next_perf_state = 0; /* Index into perf table */
 	int result = 0;
 
-	if (unlikely(data == NULL ||
-	     data->acpi_data == NULL || data->freq_table == NULL)) {
+	if (unlikely(data == NULL || data->freq_table == NULL)) {
 		return -ENODEV;
 	}
 
-	perf = data->acpi_data;
+	perf = to_perf_data(data);
 	next_perf_state = data->freq_table[index].driver_data;
 	if (perf->state == next_perf_state) {
 		if (unlikely(data->resume)) {
@@ -487,8 +490,9 @@ out:
 static unsigned long
 acpi_cpufreq_guess_freq(struct acpi_cpufreq_data *data, unsigned int cpu)
 {
-	struct acpi_processor_performance *perf = data->acpi_data;
+	struct acpi_processor_performance *perf;
 
+	perf = to_perf_data(data);
 	if (cpu_khz) {
 		/* search the closest match to cpu_khz */
 		unsigned int i;
@@ -677,18 +681,17 @@ static int acpi_cpufreq_cpu_init(struct
 		goto err_free;
 	}
 
-	data->acpi_data = per_cpu_ptr(acpi_perf_data, cpu);
+	perf = per_cpu_ptr(acpi_perf_data, cpu);
 	data->acpi_perf_cpu = cpu;
 	policy->driver_data = data;
 
 	if (cpu_has(c, X86_FEATURE_CONSTANT_TSC))
 		acpi_cpufreq_driver.flags |= CPUFREQ_CONST_LOOPS;
 
-	result = acpi_processor_register_performance(data->acpi_data, cpu);
+	result = acpi_processor_register_performance(perf, cpu);
 	if (result)
 		goto err_free_mask;
 
-	perf = data->acpi_data;
 	policy->shared_type = perf->shared_type;
 
 	/*


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups
  2015-07-18  6:04 ` [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Viresh Kumar
@ 2015-07-20 22:40   ` Rafael J. Wysocki
  0 siblings, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2015-07-20 22:40 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Linux PM list, ACPI Devel Maling List, Linux Kernel Mailing List,
	Pan Xinhui

On Saturday, July 18, 2015 11:34:46 AM Viresh Kumar wrote:
> On 18-07-15, 03:13, Rafael J. Wysocki wrote:
> > Hi,
> > 
> > The following two patches clean up a couple of things in the ACPI processor
> > driver and the ACPI cpufreq driver:
> > 
> > [1/2] Drop the unused first argument of acpi_processor_unregister_performance().
> > [2/2] Drop the now redundant acpi_data pointer from acpi_cpufreq_data.
> > 
> > Both patches on top of the current linux-next branch of the linux-pm.git tree.
> 
> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

Thanks, but I've just sent new versions out.

Rafael


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 0/3] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups
  2015-07-20 22:12 ` [PATCH v2 0/3] " Rafael J. Wysocki
                     ` (2 preceding siblings ...)
  2015-07-20 22:15   ` [PATCH v2 3/3] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data Rafael J. Wysocki
@ 2015-07-21  2:33   ` Viresh Kumar
  3 siblings, 0 replies; 12+ messages in thread
From: Viresh Kumar @ 2015-07-21  2:33 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux PM list, ACPI Devel Maling List, Linux Kernel Mailing List,
	Pan Xinhui

On 21-07-15, 00:12, Rafael J. Wysocki wrote:
> On Saturday, July 18, 2015 03:13:41 AM Rafael J. Wysocki wrote:
> > Hi,
> > 
> > The following two patches clean up a couple of things in the ACPI processor
> > driver and the ACPI cpufreq driver:
> > 
> > [1/2] Drop the unused first argument of acpi_processor_unregister_performance().
> > [2/2] Drop the now redundant acpi_data pointer from acpi_cpufreq_data.
> 
> New versios of the two above (as [2/3] and [3/3], respectively) plus one
> more ACPI cpufreq driver cleanup (discussed on linux-pm previously).

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

-- 
viresh

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-07-21  2:33 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-18  1:13 [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Rafael J. Wysocki
2015-07-18  1:14 ` [PATCH 1/2] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
2015-07-20  1:45   ` Pan Xinhui
2015-07-20 21:49     ` Rafael J. Wysocki
2015-07-18  1:16 ` [PATCH 2/2] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data Rafael J. Wysocki
2015-07-18  6:04 ` [PATCH 0/2] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Viresh Kumar
2015-07-20 22:40   ` Rafael J. Wysocki
2015-07-20 22:12 ` [PATCH v2 0/3] " Rafael J. Wysocki
2015-07-20 22:13   ` [PATCH v2 1/3] cpufreq: acpi-cpufreq: Fix up the handling of the cpb sysfs attribute Rafael J. Wysocki
2015-07-20 22:14   ` [PATCH v2 2/3] ACPI / processor: Drop an unused argument of a cleanup routine Rafael J. Wysocki
2015-07-20 22:15   ` [PATCH v2 3/3] cpufreq: acpi-cpufreq: Drop acpi_data from struct acpi_cpufreq_data Rafael J. Wysocki
2015-07-21  2:33   ` [PATCH v2 0/3] ACPI / cpufreq: ACPI processor driver and ACPI cpufreq driver cleanups Viresh Kumar

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).