Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp5305101ybl; Sun, 22 Dec 2019 03:26:00 -0800 (PST) X-Google-Smtp-Source: APXvYqyjzzBffSNyirnJL83Hw5whcm7/5P26ILqUuk7xtVfaxKdKklK2r2rMXDRu4ohyO3rV1uec X-Received: by 2002:a05:6830:1d7b:: with SMTP id l27mr24593113oti.251.1577013960837; Sun, 22 Dec 2019 03:26:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577013960; cv=none; d=google.com; s=arc-20160816; b=AguhEcrRxqXy98Yoj0yGBXk4HWiLo4YYYnJ4KNo/wOD7l4kV3NsQDrH7zUIWu79z+y fgDMmi/n683Rm7d/vKuAqPk4hWdhkH4l5fO9HfXnDOUpaPprPdV7STrKG68hWHXMhkBr wGRvFvshXCoO64KbHdeNa2D5pWGTuqMI/qV7g4B40RhISqVCCfVFzBXAs9+inGi10hID ZZRE/972j/F+iDXP9UMWNW2Y1RwbRacryzAIDTaHxhtizE3g0B9tJoYWNz9b5PQ979tX 5njn87/neoWpnybRg/XzZ7QFnqoyY5IcrqU/Y8imrUpZHERf+/h6Wh4/LkFW0kVmuKK1 yDvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:subject:cc:to:from:message-id:date; bh=jZIElUkCTDdfMPA5FI1/8Et2yZwhUVdp3ciQuBhIc8g=; b=urZgFzZvG0fk6cXb3DmVtzlpiBTnDn73Ai8hdM0vebbgfr1PZlCFxI6y+iDWjnLR0S ZLQaaYOs9b25/xZpoAygdl4j2t++YyxK3nAhifGwdwcjVsf9ub3p6xA2GwUgmZBmRvIz 5rHSHT4HMKg1BbUm5DVKYI2SkQfyp7devfOUDRTdZvpcIi67qTR+Fbuwhwn16nLZtiCg qY6uI4UM0t1CV2J7oJ7folBUmNPM2hV81g/UOhqUDhLM/N8f5NZB2MtJGPsRvdSIl6X3 2ricFfKy1BLQ2qQvObo5YVPTpt3WGaUmwl0kXXtxuuMv0XyXgpXXFPgjocqTlK6vydfQ dNjw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h3si8668409otq.203.2019.12.22.03.25.36; Sun, 22 Dec 2019 03:26:00 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726557AbfLVLYT (ORCPT + 99 others); Sun, 22 Dec 2019 06:24:19 -0500 Received: from inca-roads.misterjones.org ([213.251.177.50]:42757 "EHLO inca-roads.misterjones.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725977AbfLVLYT (ORCPT ); Sun, 22 Dec 2019 06:24:19 -0500 Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=big-swifty.misterjones.org) by cheepnis.misterjones.org with esmtpsa (TLSv1.2:AES256-GCM-SHA384:256) (Exim 4.80) (envelope-from ) id 1iizLM-0006ag-LE; Sun, 22 Dec 2019 12:24:17 +0100 Date: Sun, 22 Dec 2019 11:24:13 +0000 Message-ID: <868sn4iowy.wl-maz@kernel.org> From: Marc Zyngier To: Andrew Murray Cc: Catalin Marinas , Will Deacon , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Sudeep Holla , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v2 13/18] perf: arm_spe: Add KVM structure for obtaining IRQ info In-Reply-To: <20191220143025.33853-14-andrew.murray@arm.com> References: <20191220143025.33853-1-andrew.murray@arm.com> <20191220143025.33853-14-andrew.murray@arm.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 EasyPG/1.0.0 Emacs/26 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: andrew.murray@arm.com, catalin.marinas@arm.com, will@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, sudeep.holla@arm.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on cheepnis.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 20 Dec 2019 14:30:20 +0000, Andrew Murray wrote: > > KVM requires knowledge of the physical SPE IRQ number such that it can > associate it with any virtual IRQ for guests that require SPE emulation. This is at best extremely odd. The only reason for KVM to obtain this IRQ number is if it has exclusive access to the device. This obviously isn't the case, as this device is shared between host and guest. > Let's create a structure to hold this information and an accessor that > KVM can use to retrieve this information. > > We expect that each SPE device will have the same physical PPI number > and thus will warn when this is not the case. > > Signed-off-by: Andrew Murray > --- > drivers/perf/arm_spe_pmu.c | 23 +++++++++++++++++++++++ > include/kvm/arm_spe.h | 6 ++++++ > 2 files changed, 29 insertions(+) > > diff --git a/drivers/perf/arm_spe_pmu.c b/drivers/perf/arm_spe_pmu.c > index 4e4984a55cd1..2d24af4cfcab 100644 > --- a/drivers/perf/arm_spe_pmu.c > +++ b/drivers/perf/arm_spe_pmu.c > @@ -34,6 +34,9 @@ > #include > #include > > +#include > +#include > + > #include > #include > #include > @@ -1127,6 +1130,24 @@ static void arm_spe_pmu_dev_teardown(struct arm_spe_pmu *spe_pmu) > free_percpu_irq(spe_pmu->irq, spe_pmu->handle); > } > > +#ifdef CONFIG_KVM_ARM_SPE > +static struct arm_spe_kvm_info arm_spe_kvm_info; > + > +struct arm_spe_kvm_info *arm_spe_get_kvm_info(void) > +{ > + return &arm_spe_kvm_info; > +} How does this work when SPE is built as a module? > + > +static void arm_spe_populate_kvm_info(struct arm_spe_pmu *spe_pmu) > +{ > + WARN_ON_ONCE(arm_spe_kvm_info.physical_irq != 0 && > + arm_spe_kvm_info.physical_irq != spe_pmu->irq); > + arm_spe_kvm_info.physical_irq = spe_pmu->irq; What does 'physical' means here? It's an IRQ in the Linux sense, so it's already some random number that bears no relation to anything 'physical'. > +} > +#else > +static void arm_spe_populate_kvm_info(struct arm_spe_pmu *spe_pmu) {} > +#endif > + > /* Driver and device probing */ > static int arm_spe_pmu_irq_probe(struct arm_spe_pmu *spe_pmu) > { > @@ -1149,6 +1170,8 @@ static int arm_spe_pmu_irq_probe(struct arm_spe_pmu *spe_pmu) > } > > spe_pmu->irq = irq; > + arm_spe_populate_kvm_info(spe_pmu); > + > return 0; > } > > diff --git a/include/kvm/arm_spe.h b/include/kvm/arm_spe.h > index d1f3c564dfd0..9c65130d726d 100644 > --- a/include/kvm/arm_spe.h > +++ b/include/kvm/arm_spe.h > @@ -17,6 +17,12 @@ struct kvm_spe { > bool irq_level; > }; > > +struct arm_spe_kvm_info { > + int physical_irq; > +}; > + > +struct arm_spe_kvm_info *arm_spe_get_kvm_info(void); > + > #ifdef CONFIG_KVM_ARM_SPE > #define kvm_arm_spe_v1_ready(v) ((v)->arch.spe.ready) > #define kvm_arm_spe_irq_initialized(v) \ M. -- Jazz is not dead, it just smells funny.