From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932598AbcFOLTd (ORCPT ); Wed, 15 Jun 2016 07:19:33 -0400 Received: from mx2.suse.de ([195.135.220.15]:49610 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753100AbcFOLTc (ORCPT ); Wed, 15 Jun 2016 07:19:32 -0400 Subject: Re: [PATCH v5 5/6] dcdbas: make use of smp_call_on_cpu() To: linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org References: <1459952266-3687-1-git-send-email-jgross@suse.com> <1459952266-3687-6-git-send-email-jgross@suse.com> Cc: boris.ostrovsky@oracle.com, david.vrabel@citrix.com, mingo@redhat.com, peterz@infradead.org, Douglas_Warzecha@dell.com, pali.rohar@gmail.com, jdelvare@suse.com, linux@roeck-us.net, tglx@linutronix.de, hpa@zytor.com, jeremy@goop.org, chrisw@sous-sol.org, akataria@vmware.com, rusty@rustcorp.com.au, virtualization@lists.linux-foundation.org, x86@kernel.org From: Juergen Gross Message-ID: <576139C1.4030301@suse.com> Date: Wed, 15 Jun 2016 13:19:29 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 In-Reply-To: <1459952266-3687-6-git-send-email-jgross@suse.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/04/16 16:17, Juergen Gross wrote: > Use smp_call_on_cpu() to raise SMI on cpu 0. > Make call secure by adding get_online_cpus() to avoid e.g. suspend > resume cycles in between. > > Signed-off-by: Juergen Gross Could please some maintainer comment on this patch? Juergen > --- > V4: add call to get_online_cpus() > --- > drivers/firmware/dcdbas.c | 51 ++++++++++++++++++++++++----------------------- > 1 file changed, 26 insertions(+), 25 deletions(-) > > diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c > index 829eec8..2fe1a13 100644 > --- a/drivers/firmware/dcdbas.c > +++ b/drivers/firmware/dcdbas.c > @@ -23,6 +23,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -238,33 +239,14 @@ static ssize_t host_control_on_shutdown_store(struct device *dev, > return count; > } > > -/** > - * dcdbas_smi_request: generate SMI request > - * > - * Called with smi_data_lock. > - */ > -int dcdbas_smi_request(struct smi_cmd *smi_cmd) > +static int raise_smi(void *par) > { > - cpumask_var_t old_mask; > - int ret = 0; > + struct smi_cmd *smi_cmd = par; > > - if (smi_cmd->magic != SMI_CMD_MAGIC) { > - dev_info(&dcdbas_pdev->dev, "%s: invalid magic value\n", > - __func__); > - return -EBADR; > - } > - > - /* SMI requires CPU 0 */ > - if (!alloc_cpumask_var(&old_mask, GFP_KERNEL)) > - return -ENOMEM; > - > - cpumask_copy(old_mask, ¤t->cpus_allowed); > - set_cpus_allowed_ptr(current, cpumask_of(0)); > if (smp_processor_id() != 0) { > dev_dbg(&dcdbas_pdev->dev, "%s: failed to get CPU 0\n", > __func__); > - ret = -EBUSY; > - goto out; > + return -EBUSY; > } > > /* generate SMI */ > @@ -280,9 +262,28 @@ int dcdbas_smi_request(struct smi_cmd *smi_cmd) > : "memory" > ); > > -out: > - set_cpus_allowed_ptr(current, old_mask); > - free_cpumask_var(old_mask); > + return 0; > +} > +/** > + * dcdbas_smi_request: generate SMI request > + * > + * Called with smi_data_lock. > + */ > +int dcdbas_smi_request(struct smi_cmd *smi_cmd) > +{ > + int ret; > + > + if (smi_cmd->magic != SMI_CMD_MAGIC) { > + dev_info(&dcdbas_pdev->dev, "%s: invalid magic value\n", > + __func__); > + return -EBADR; > + } > + > + /* SMI requires CPU 0 */ > + get_online_cpus(); > + ret = smp_call_on_cpu(0, raise_smi, smi_cmd, true); > + put_online_cpus(); > + > return ret; > } > >