From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752629AbcHKOof (ORCPT ); Thu, 11 Aug 2016 10:44:35 -0400 Received: from Galois.linutronix.de ([146.0.238.70]:54518 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751031AbcHKOod (ORCPT ); Thu, 11 Aug 2016 10:44:33 -0400 Date: Thu, 11 Aug 2016 16:44:27 +0200 From: Sebastian Andrzej Siewior To: Boris Ostrovsky Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de, jgross@suse.com, torvalds@linux-foundation.org, mingo@kernel.org, hpa@zytor.com, peterz@infradead.org, anna-maria@linutronix.de Subject: Re: [tip:smp/hotplug] cpu/hotplug: Prevent alloc/free of irq descriptors during CPU up/down (again) Message-ID: <20160811144427.j4j3n42eufomtnid@linutronix.de> References: <1470244948-17674-3-git-send-email-boris.ostrovsky@oracle.com> <287b42da-0388-f43e-34f7-a90935c33fa9@oracle.com> <20160811132020.bkdneatkijy7qxal@linutronix.de> <20160811141736.ce6bjtvbg4riquo2@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.6.2-neo (2016-07-23) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2016-08-11 10:30:57 [-0400], Boris Ostrovsky wrote: > So you must have converted Xen code already then? Can you post those > patches (not all 1285, just Xen-related, assuming there are no > dependencies) and I'll see if I can add them to this series? This is patch 77. I *hope* the only clash (if any) will be in cpuhotplug.h. I did not yet retest things in terms of apply & compile. I plan to do so within this + next week. If you want to test it right away, please do so :) From: Sebastian Andrzej Siewior Date: Wed, 4 Nov 2015 21:06:00 +0100 Subject: [PATCH] xen: events: fifo: Convert to hotplug state machine Install the callbacks via the state machine. In theory we could remove the upper call evtchn_fifo_alloc_control_block() and have callback invoked for all online CPUs but this does not reflect the currect code. Cc: Konrad Rzeszutek Wilk Cc: Boris Ostrovsky Cc: David Vrabel Cc: xen-devel@lists.xenproject.org Signed-off-by: Sebastian Andrzej Siewior --- drivers/xen/events/events_fifo.c | 33 +++++++++++---------------------- include/linux/cpuhotplug.h | 1 + 2 files changed, 12 insertions(+), 22 deletions(-) --- a/drivers/xen/events/events_fifo.c +++ b/drivers/xen/events/events_fifo.c @@ -418,30 +418,18 @@ static int evtchn_fifo_alloc_control_blo return ret; } -static int evtchn_fifo_cpu_notification(struct notifier_block *self, - unsigned long action, - void *hcpu) +static int xen_evtchn_cpu_prepare(unsigned int cpu) { - int cpu = (long)hcpu; - int ret = 0; - - switch (action) { - case CPU_UP_PREPARE: - if (!per_cpu(cpu_control_block, cpu)) - ret = evtchn_fifo_alloc_control_block(cpu); - break; - case CPU_DEAD: - __evtchn_fifo_handle_events(cpu, true); - break; - default: - break; - } - return ret < 0 ? NOTIFY_BAD : NOTIFY_OK; + if (!per_cpu(cpu_control_block, cpu)) + return evtchn_fifo_alloc_control_block(cpu); + return 0; } -static struct notifier_block evtchn_fifo_cpu_notifier = { - .notifier_call = evtchn_fifo_cpu_notification, -}; +static int xen_evtchn_cpu_dead(unsigned int cpu) +{ + __evtchn_fifo_handle_events(cpu, true); + return 0; +} int __init xen_evtchn_fifo_init(void) { @@ -456,7 +444,8 @@ int __init xen_evtchn_fifo_init(void) evtchn_ops = &evtchn_ops_fifo; - register_cpu_notifier(&evtchn_fifo_cpu_notifier); + cpuhp_setup_state_nocalls(CPUHP_XEN_EV_PREPEARE, "XEN_EV_PREPEARE", + xen_evtchn_cpu_prepare, xen_evtchn_cpu_dead); out: put_cpu(); return ret; --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h @@ -22,6 +22,7 @@ enum cpuhp_state { CPUHP_SMPCFD_PREPARE, CPUHP_RELAY_PREPARE, CPUHP_SLAB_PREPARE, + CPUHP_XEN_EV_PREPEARE, CPUHP_TIMERS_DEAD, CPUHP_SLUB_DEAD, CPUHP_MM_WRITEBACK_DEAD, Sebastian