From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: x86@kernel.org, Nadav Amit <namit@vmware.com>,
Ricardo Neri <ricardo.neri-calderon@linux.intel.com>,
Stephane Eranian <eranian@google.com>,
Feng Tang <feng.tang@intel.com>
Subject: [patch 18/18] x86/apic/x2apic: Add conditional IPI shorthands support
Date: Wed, 03 Jul 2019 12:54:49 +0200 [thread overview]
Message-ID: <20190703105917.246171169@linutronix.de> (raw)
In-Reply-To: <20190703105431.096822793@linutronix.de>
Use the shorthand broadcast delivery if the static key controlling it is
enabled. If not use the regular one by one IPI mechanism.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/local.h | 1 +
arch/x86/kernel/apic/x2apic_cluster.c | 10 ++++++++--
arch/x86/kernel/apic/x2apic_phys.c | 18 ++++++++++++++++--
3 files changed, 25 insertions(+), 4 deletions(-)
--- a/arch/x86/kernel/apic/local.h
+++ b/arch/x86/kernel/apic/local.h
@@ -23,6 +23,7 @@ unsigned int x2apic_get_apic_id(unsigned
u32 x2apic_set_apic_id(unsigned int id);
int x2apic_phys_pkg_id(int initial_apicid, int index_msb);
void x2apic_send_IPI_self(int vector);
+void __x2apic_send_IPI_shorthand(int vector, u32 which);
/* IPI */
--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
@@ -82,12 +82,18 @@ x2apic_send_IPI_mask_allbutself(const st
static void x2apic_send_IPI_allbutself(int vector)
{
- __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLBUT);
+ if (static_branch_likely(&apic_use_ipi_shorthand))
+ __x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLBUT);
+ else
+ __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLBUT);
}
static void x2apic_send_IPI_all(int vector)
{
- __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLINC);
+ if (static_branch_likely(&apic_use_ipi_shorthand))
+ __x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLINC);
+ else
+ __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLINC);
}
static u32 x2apic_calc_apicid(unsigned int cpu)
--- a/arch/x86/kernel/apic/x2apic_phys.c
+++ b/arch/x86/kernel/apic/x2apic_phys.c
@@ -75,12 +75,18 @@ static void
static void x2apic_send_IPI_allbutself(int vector)
{
- __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLBUT);
+ if (static_branch_likely(&apic_use_ipi_shorthand))
+ __x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLBUT);
+ else
+ __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLBUT);
}
static void x2apic_send_IPI_all(int vector)
{
- __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLINC);
+ if (static_branch_likely(&apic_use_ipi_shorthand))
+ __x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLINC);
+ else
+ __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLINC);
}
static void init_x2apic_ldr(void)
@@ -112,6 +118,14 @@ void __x2apic_send_IPI_dest(unsigned int
native_x2apic_icr_write(cfg, apicid);
}
+void __x2apic_send_IPI_shorthand(int vector, u32 which)
+{
+ unsigned long cfg = __prepare_ICR(which, vector, 0);
+
+ x2apic_wrmsr_fence();
+ native_x2apic_icr_write(cfg, 0);
+}
+
unsigned int x2apic_get_apic_id(unsigned long id)
{
return id;
prev parent reply other threads:[~2019-07-03 11:04 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-03 10:54 [patch 00/18] x86/apic: Support for IPI shorthands Thomas Gleixner
2019-07-03 10:54 ` [patch 01/18] x86/apic: Invoke perf_events_lapic_init() after enabling APIC Thomas Gleixner
2019-07-03 10:54 ` [patch 02/18] x86/apic: Soft disable APIC before initializing it Thomas Gleixner
2019-07-03 10:54 ` [patch 03/18] x86/apic: Make apic_pending_intr_clear() more robust Thomas Gleixner
2019-07-03 10:54 ` [patch 04/18] x86/apic: Move IPI inlines into ipi.c Thomas Gleixner
2019-07-03 10:54 ` [patch 05/18] x86/apic: Cleanup the include maze Thomas Gleixner
2019-07-03 10:54 ` [patch 06/18] x86/apic: Move ipi header into apic directory Thomas Gleixner
2019-07-03 10:54 ` [patch 07/18] x86/apic: Move apic_flat_64 " Thomas Gleixner
2019-07-03 10:54 ` [patch 08/18] x86/apic: Consolidate the apic local headers Thomas Gleixner
2019-07-03 10:54 ` [patch 09/18] smp/hotplug: Track booted once CPUs in a cpumask Thomas Gleixner
2019-07-03 10:54 ` [patch 10/18] x86/cpu: Move arch_smt_update() to a neutral place Thomas Gleixner
2019-07-03 10:54 ` [patch 11/18] x86/hotplug: Silence APIC and NMI when CPU is dead Thomas Gleixner
2019-07-03 10:54 ` [patch 12/18] x86/apic: Remove dest argument from __default_send_IPI_shortcut() Thomas Gleixner
2019-07-03 10:54 ` [patch 13/18] x86/apic: Add NMI_VECTOR wait to IPI shorthand Thomas Gleixner
2019-07-03 10:54 ` [patch 14/18] x86/apic: Move no_ipi_broadcast() out of 32bit Thomas Gleixner
2019-07-03 10:54 ` [patch 15/18] x86/apic: Add static key to Control IPI shorthands Thomas Gleixner
2019-07-03 10:54 ` [patch 16/18] x86/apic: Convert 32bit to IPI shorthand static key Thomas Gleixner
2019-07-03 18:06 ` Nadav Amit
2019-07-03 20:34 ` Thomas Gleixner
2019-07-03 21:14 ` Nadav Amit
2019-07-03 21:30 ` Thomas Gleixner
2019-07-03 10:54 ` [patch 17/18] x86/apic/flat64: Add conditional IPI shorthands support Thomas Gleixner
2019-07-03 10:54 ` Thomas Gleixner [this message]
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=20190703105917.246171169@linutronix.de \
--to=tglx@linutronix.de \
--cc=eranian@google.com \
--cc=feng.tang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namit@vmware.com \
--cc=ricardo.neri-calderon@linux.intel.com \
--cc=x86@kernel.org \
/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
all inboxes | Powered by JetHome®