linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: "Chen, Gong" <gong.chen@linux.intel.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
	tglx@linutronix.de, paulus@samba.org, benh@kernel.crashing.org,
	tony.luck@intel.com, hpa@zytor.com, jkosina@suse.cz,
	rafael.j.wysocki@intel.com, linux@arm.linux.org.uk,
	ralf@linux-mips.org, schwidefsky@de.ibm.com, davem@davemloft.net,
	viro@zeniv.linux.org.uk, fweisbec@gmail.com, cl@linux.com,
	akpm@linux-foundation.org, axboe@kernel.dk,
	JBottomley@parallels.com, neilb@suse.de,
	christoffer.dall@linaro.org, rostedt@goodmis.org,
	rric@kernel.org, gregkh@linuxfoundation.org, mhocko@suse.cz,
	david@fromorbit.com
Subject: Re: [RFC PATCH v1 13/70] x86, x2apic_cluster: _FROZEN Cleanup
Date: Wed, 23 Jul 2014 22:36:28 +0200	[thread overview]
Message-ID: <20140723203628.GJ21707@pd.tnic> (raw)
In-Reply-To: <1406080786-3938-14-git-send-email-gong.chen@linux.intel.com>

On Tue, Jul 22, 2014 at 09:58:49PM -0400, Chen, Gong wrote:
> Remove XXX_FROZEN state from x86/x2apic_cluster.
> 
> Signed-off-by: Chen, Gong <gong.chen@linux.intel.com>
> ---
>  arch/x86/kernel/apic/x2apic_cluster.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
> index e66766b..bfd2369 100644
> --- a/arch/x86/kernel/apic/x2apic_cluster.c
> +++ b/arch/x86/kernel/apic/x2apic_cluster.c
> @@ -154,8 +154,11 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
>  	unsigned int cpu;
>  	int err = 0;
>  
> -	switch (action) {
> +	switch (action & ~CPU_TASKS_FROZEN) {
>  	case CPU_UP_PREPARE:
> +		if (action & CPU_TASKS_FROZEN)
> +			break;
> +
>  		if (!zalloc_cpumask_var(&per_cpu(cpus_in_cluster, this_cpu),
>  					GFP_KERNEL)) {
>  			err = -ENOMEM;
> @@ -165,9 +168,11 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
>  			err = -ENOMEM;
>  		}
>  		break;
> -	case CPU_UP_CANCELED:
> -	case CPU_UP_CANCELED_FROZEN:
>  	case CPU_DEAD:
> +		/* fall though to next if action == CPU_DEAD */
> +		if (action & CPU_TASKS_FROZEN)
> +			break;
> +	case CPU_UP_CANCELED:
>  		for_each_online_cpu(cpu) {
>  			if (x2apic_cluster(this_cpu) != x2apic_cluster(cpu))
>  				continue;

Those checks dealing with CPU_TASKS_FROZEN in-between make the whole
switch statement hard to follow.

How about we go a step further and deal with CPU_UP_CANCELED_FROZEN
upfront and even simplify the rest:

---
Index: b/arch/x86/kernel/apic/x2apic_cluster.c
===================================================================
--- a/arch/x86/kernel/apic/x2apic_cluster.c	2014-07-23 22:21:27.574344741 +0200
+++ b/arch/x86/kernel/apic/x2apic_cluster.c	2014-07-23 22:30:58.638338359 +0200
@@ -144,6 +144,21 @@ static void init_x2apic_ldr(void)
 	}
 }
 
+static void __update_clusterinfo(unsigned int this_cpu)
+{
+	unsigned int cpu;
+
+	for_each_online_cpu(cpu) {
+		if (x2apic_cluster(this_cpu) != x2apic_cluster(cpu))
+			continue;
+		__cpu_clear(this_cpu, per_cpu(cpus_in_cluster, cpu));
+		__cpu_clear(cpu, per_cpu(cpus_in_cluster, this_cpu));
+	}
+
+	free_cpumask_var(per_cpu(cpus_in_cluster, this_cpu));
+	free_cpumask_var(per_cpu(ipi_mask, this_cpu));
+}
+
  /*
   * At CPU state changes, update the x2apic cluster sibling info.
   */
@@ -151,9 +166,14 @@ static int
 update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
 {
 	unsigned int this_cpu = (unsigned long)hcpu;
-	unsigned int cpu;
 	int err = 0;
 
+	if (action & CPU_TASKS_FROZEN) {
+		if ((action & ~CPU_TASKS_FROZEN) == CPU_UP_CANCELED)
+			__update_clusterinfo(this_cpu);
+		return NOTIFY_OK;
+	}
+
 	switch (action) {
 	case CPU_UP_PREPARE:
 		if (!zalloc_cpumask_var(&per_cpu(cpus_in_cluster, this_cpu),
@@ -166,16 +186,10 @@ update_clusterinfo(struct notifier_block
 		}
 		break;
 	case CPU_UP_CANCELED:
-	case CPU_UP_CANCELED_FROZEN:
 	case CPU_DEAD:
-		for_each_online_cpu(cpu) {
-			if (x2apic_cluster(this_cpu) != x2apic_cluster(cpu))
-				continue;
-			__cpu_clear(this_cpu, per_cpu(cpus_in_cluster, cpu));
-			__cpu_clear(cpu, per_cpu(cpus_in_cluster, this_cpu));
-		}
-		free_cpumask_var(per_cpu(cpus_in_cluster, this_cpu));
-		free_cpumask_var(per_cpu(ipi_mask, this_cpu));
+		__update_clusterinfo(this_cpu);
+		break;
+	default:
 		break;
 	}
 

-- 
Regards/Gruss,
    Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

  reply	other threads:[~2014-07-23 20:36 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-23  1:58 [RESEND RFC PATCH v1 0/70] Gloabl CPU Hot-plug flag _FROZEN Clean up Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 01/70] cpu: Restructure FROZEN state handling Chen, Gong
2014-07-23 13:50   ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 02/70] ia64, err_inject: _FROZEN Cleanup Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 03/70] ia64, mca: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 04/70] ia64, palinfo: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 05/70] ia64, salinfo: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 06/70] ia64, topology: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 07/70] x86, intel_cacheinfo: " Chen, Gong
2014-07-23 14:05   ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 08/70] x86, mce, therm_throt: " Chen, Gong
2014-07-23 16:17   ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 09/70] x86, mce_amd: " Chen, Gong
2014-07-23 16:21   ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 10/70] x86, kvm: " Chen, Gong
2014-07-23 16:23   ` Borislav Petkov
2014-07-23 19:22     ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 11/70] x86, vsyscall_64: " Chen, Gong
2014-07-23 17:24   ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 12/70] x86, pci, amd_bus: " Chen, Gong
2014-07-23 18:07   ` Borislav Petkov
2014-07-24  1:31     ` Chen, Gong
2014-07-24  8:28       ` Borislav Petkov
2014-07-28  6:03         ` Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 13/70] x86, x2apic_cluster: " Chen, Gong
2014-07-23 20:36   ` Borislav Petkov [this message]
2014-07-28  6:04     ` Chen, Gong
2014-07-29  8:44       ` Borislav Petkov
2014-07-29  9:00         ` Chen, Gong
2014-07-30  6:24     ` Chen, Gong
2014-07-30  8:48       ` Borislav Petkov
2014-07-31  7:52         ` Chen, Gong
2014-07-31  9:13           ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 14/70] x86, microcode, core: " Chen, Gong
2014-07-24  9:03   ` Borislav Petkov
2014-07-28  6:06     ` Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 15/70] x86, kernel, cpuid: " Chen, Gong
2014-07-24  9:11   ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 16/70] x86, kernel, msr: " Chen, Gong
2014-07-24  9:52   ` Borislav Petkov
2014-07-23  1:58 ` [RFC PATCH v1 17/70] arm, vfp, vfpmodule: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 18/70] arm, kvm: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 19/70] powerpc, sysfs: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 20/70] powerpc, mm, numa: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 21/70] powerpc, powermac, smp: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 22/70] powerpc, mmu_context_nohash: " Chen, Gong
2014-07-23  1:58 ` [RFC PATCH v1 23/70] mips, loongson, smp: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 24/70] s390, perf_cpum_sf: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 25/70] sparc, sysfs: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 26/70] rcu, tree: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 27/70] kernel, padata: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 28/70] kernel, profile: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 29/70] kernel, sched, core: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 30/70] kernel, hrtimer: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 31/70] kernel, relay: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 32/70] kernel, smp: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 33/70] kernel, timer: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 34/70] kernel, softirq: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 35/70] mm, slab: " Chen, Gong
2014-07-28 15:55   ` Christoph Lameter
2014-07-23  1:59 ` [RFC PATCH v1 36/70] mm, vmscan: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 37/70] mm, vmstat: " Chen, Gong
2014-07-28 15:56   ` Christoph Lameter
2014-07-23  1:59 ` [RFC PATCH v1 38/70] mm, memcontrol: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 39/70] mm, page_alloc: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 40/70] mm, slub: " Chen, Gong
2014-07-28 15:56   ` Christoph Lameter
2014-07-23  1:59 ` [RFC PATCH v1 41/70] fs, buffer: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 42/70] xfs, xfs_mount: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 43/70] net, iucv: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 44/70] net, core, flow: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 45/70] net, core, dev: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 46/70] block, blk-mq: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 47/70] block, blk-iopoll: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 48/70] block, blk-softirq: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 49/70] driver, base, topology: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 50/70] clocksource, metag_generic: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 51/70] powercap, intel_rapl: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 52/70] cpuidle, cpuidle-powernv: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 53/70] cpuidle, cpuidle-pseries: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 54/70] cpufreq, acpi-cpufreq: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 55/70] irqchip, irq-armada-370-xp: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 56/70] irqchip, irq-gic: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 57/70] scsi, bnx2fc, bnx2fc_fcoe: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 58/70] scsi, bnx2i, bnx2i_init: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 59/70] scsi, fcoe: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 60/70] scsi, virtio_scsi: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 61/70] md, raid5: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 62/70] virt, kvm, arm, arch_timer: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 63/70] virt, kvm, arm, vgic: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 64/70] trace, ring_buffer: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 65/70] oprofile, timer_int: " Chen, Gong
2014-07-28 13:35   ` Robert Richter
2014-07-23  1:59 ` [RFC PATCH v1 66/70] lib, cpu-notifier-error-inject: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 67/70] lib, percpu_counter: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 68/70] lib, radix-tree: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 69/70] staging, lustre, linux-cpu: " Chen, Gong
2014-07-23  1:59 ` [RFC PATCH v1 70/70] cpu: Eliminate _FROZEN flags thoroughly Chen, Gong
2014-07-25  1:35 ` [RESEND RFC PATCH v1 0/70] Gloabl CPU Hot-plug flag _FROZEN Clean up Chen, Gong
2014-07-25  7:10   ` Borislav Petkov
2014-07-25 13:46     ` Chen, Gong
2014-07-25 15:00 ` Robert Richter
2014-07-27  6:36   ` Chen, Gong
2014-07-27 10:17     ` Borislav Petkov
2014-07-28 13:28     ` Robert Richter

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=20140723203628.GJ21707@pd.tnic \
    --to=bp@alien8.de \
    --cc=JBottomley@parallels.com \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=benh@kernel.crashing.org \
    --cc=christoffer.dall@linaro.org \
    --cc=cl@linux.com \
    --cc=davem@davemloft.net \
    --cc=david@fromorbit.com \
    --cc=fweisbec@gmail.com \
    --cc=gong.chen@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=jkosina@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mhocko@suse.cz \
    --cc=mingo@kernel.org \
    --cc=neilb@suse.de \
    --cc=paulus@samba.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=ralf@linux-mips.org \
    --cc=rostedt@goodmis.org \
    --cc=rric@kernel.org \
    --cc=schwidefsky@de.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=viro@zeniv.linux.org.uk \
    /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: link
Be 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).