Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1262713 > unrolled thread
| Started by | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| First post | 2015-11-05 00:10 +0100 |
| Last post | 2015-11-05 15:50 +0100 |
| Articles | 18 — 5 participants |
Back to article view | Back to linux.kernel
[patch 00/14] x86/apic: Implement single target IPI callback Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
[patch 06/14] x86/apic: Remove pointless indirections from bigsmp_apic Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
[tip:x86/apic] x86/apic: Remove pointless indirections from bigsmp_apic tip-bot for Thomas Gleixner <tipbot@zytor.com> - 2015-11-05 15:50 +0100
[patch 01/14] x86/apic: Add a single-target IPI function to the apic Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
[tip:x86/apic] x86/apic: Add a single-target IPI function to the apic tip-bot for Linus Torvalds <tipbot@zytor.com> - 2015-11-05 15:50 +0100
[patch 05/14] x86/apic: Wire up single IPI for apic_physflat Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
[tip:x86/apic] x86/apic: Wire up single IPI for apic_physflat tip-bot for Thomas Gleixner <tipbot@zytor.com> - 2015-11-05 15:50 +0100
[patch 04/14] x86/apic: Remove pointless indirections from apic_physflat Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
[tip:x86/apic] x86/apic: Remove pointless indirections from apic_physflat tip-bot for Thomas Gleixner <tipbot@zytor.com> - 2015-11-05 15:50 +0100
[patch 08/14] x86/apic: Implement single IPI for x2apic_phys Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
[tip:x86/apic] x86/apic: Implement single IPI for x2apic_phys tip-bot for Thomas Gleixner <tipbot@zytor.com> - 2015-11-05 15:50 +0100
[patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
Re: [patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster Linus Torvalds <torvalds@linux-foundation.org> - 2015-11-05 08:10 +0100
Re: [patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 09:10 +0100
Re: [patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster Ingo Molnar <mingo@kernel.org> - 2015-11-05 08:10 +0100
[tip:x86/apic] x86/apic: Implement single target IPI function for x2apic_cluster tip-bot for Linus Torvalds <tipbot@zytor.com> - 2015-11-05 15:50 +0100
[patch 10/14] x86/apic: Implement single IPI for apic_noop Thomas Gleixner <tglx@linutronix.de> - 2015-11-05 00:10 +0100
[tip:x86/apic] x86/apic: Implement single IPI for apic_noop tip-bot for Thomas Gleixner <tipbot@zytor.com> - 2015-11-05 15:50 +0100
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 00/14] x86/apic: Implement single target IPI callback |
| Message-ID | <qrfc5-6Fb-3@gated-at.bofh.it> |
Linus provided a implementation for this for x2apic_cluster and mumbled at http://marc.info/?l=linux-kernel&m=144660325518209 : > Side note, I have an *old* patch that I think simplifies the > (reasonably common) case of sending IPI's to individual CPU's. That's > done by the "reschedule ipi" in particular. > > That's something that is trivially done on the x2apic, but that the > mask-based interfaces makes insanely complicated. > > I have *not* rebased this on top of modern kernels so it may not > actually work as a patch any more, because I'm just sending this out > as a "Hmm, what do you guys think" rather than a real submission. I thought it's worthwhile so I had a look at the other apic implementations and all but apic_default and apic_flat can be converted halfways simple to provide a single target callback. The following series does that and gets rid of the wrapper in the call site at the end. Compiles and didn't explode when booting it, so it must be perfect :) Thanks, tglx --- arch/x86/include/asm/apic.h | 1 + arch/x86/include/asm/ipi.h | 2 ++ arch/x86/kernel/apic/apic_flat_64.c | 19 +++++-------------- arch/x86/kernel/apic/apic_noop.c | 2 ++ arch/x86/kernel/apic/apic_numachip.c | 2 ++ arch/x86/kernel/apic/bigsmp_32.c | 10 +++------- arch/x86/kernel/apic/ipi.c | 18 ++++++++++++++++++ arch/x86/kernel/apic/probe_32.c | 1 + arch/x86/kernel/apic/x2apic_cluster.c | 12 ++++++++++++ arch/x86/kernel/apic/x2apic_phys.c | 12 ++++++++++++ arch/x86/kernel/apic/x2apic_uv_x.c | 1 + arch/x86/kernel/smp.c | 4 ++-- 12 files changed, 61 insertions(+), 23 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 06/14] x86/apic: Remove pointless indirections from bigsmp_apic |
| Message-ID | <qrflM-6Yk-11@gated-at.bofh.it> |
| In reply to | #1262713 |
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/bigsmp_32.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
Index: linux/arch/x86/kernel/apic/bigsmp_32.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/bigsmp_32.c
+++ linux/arch/x86/kernel/apic/bigsmp_32.c
@@ -96,11 +96,6 @@ static int bigsmp_phys_pkg_id(int cpuid_
return cpuid_apic >> index_msb;
}
-static inline void bigsmp_send_IPI_mask(const struct cpumask *mask, int vector)
-{
- default_send_IPI_mask_sequence_phys(mask, vector);
-}
-
static void bigsmp_send_IPI_allbutself(int vector)
{
default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
@@ -108,7 +103,7 @@ static void bigsmp_send_IPI_allbutself(i
static void bigsmp_send_IPI_all(int vector)
{
- bigsmp_send_IPI_mask(cpu_online_mask, vector);
+ default_send_IPI_mask_sequence_phys(cpu_online_mask, vector);
}
static int dmi_bigsmp; /* can be set by dmi scanners */
@@ -180,7 +175,7 @@ static struct apic apic_bigsmp = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
- .send_IPI_mask = bigsmp_send_IPI_mask,
+ .send_IPI_mask = default_send_IPI_mask_sequence_phys,
.send_IPI_mask_allbutself = NULL,
.send_IPI_allbutself = bigsmp_send_IPI_allbutself,
.send_IPI_all = bigsmp_send_IPI_all,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Thomas Gleixner <tipbot@zytor.com> |
|---|---|
| Date | 2015-11-05 15:50 +0100 |
| Subject | [tip:x86/apic] x86/apic: Remove pointless indirections from bigsmp_apic |
| Message-ID | <qru1v-7Yg-97@gated-at.bofh.it> |
| In reply to | #1262716 |
Commit-ID: 500bd02fb17e5d9296c77ccc07db61fd5d4922a4
Gitweb: http://git.kernel.org/tip/500bd02fb17e5d9296c77ccc07db61fd5d4922a4
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Wed, 4 Nov 2015 22:57:03 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Nov 2015 13:07:52 +0100
x86/apic: Remove pointless indirections from bigsmp_apic
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Borislav Petkov <bp@alien.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Travis <travis@sgi.com>
Cc: Daniel J Blueman <daniel@numascale.com>
Link: http://lkml.kernel.org/r/20151104220849.133086575@linutronix.de
---
arch/x86/kernel/apic/bigsmp_32.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/arch/x86/kernel/apic/bigsmp_32.c b/arch/x86/kernel/apic/bigsmp_32.c
index 971cf88..d4d103b 100644
--- a/arch/x86/kernel/apic/bigsmp_32.c
+++ b/arch/x86/kernel/apic/bigsmp_32.c
@@ -96,11 +96,6 @@ static int bigsmp_phys_pkg_id(int cpuid_apic, int index_msb)
return cpuid_apic >> index_msb;
}
-static inline void bigsmp_send_IPI_mask(const struct cpumask *mask, int vector)
-{
- default_send_IPI_mask_sequence_phys(mask, vector);
-}
-
static void bigsmp_send_IPI_allbutself(int vector)
{
default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
@@ -108,7 +103,7 @@ static void bigsmp_send_IPI_allbutself(int vector)
static void bigsmp_send_IPI_all(int vector)
{
- bigsmp_send_IPI_mask(cpu_online_mask, vector);
+ default_send_IPI_mask_sequence_phys(cpu_online_mask, vector);
}
static int dmi_bigsmp; /* can be set by dmi scanners */
@@ -180,7 +175,7 @@ static struct apic apic_bigsmp = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
- .send_IPI_mask = bigsmp_send_IPI_mask,
+ .send_IPI_mask = default_send_IPI_mask_sequence_phys,
.send_IPI_mask_allbutself = NULL,
.send_IPI_allbutself = bigsmp_send_IPI_allbutself,
.send_IPI_all = bigsmp_send_IPI_all,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 01/14] x86/apic: Add a single-target IPI function to the apic |
| Message-ID | <qrflM-6Yk-15@gated-at.bofh.it> |
| In reply to | #1262713 |
From: Linus Torvalds <torvalds@linux-foundation.org>
We still fall back on the "send mask" versions if an apic definition
doesn't have the single-target version, but at least this allows the
(trivial) case for the common clustered x2apic case.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/include/asm/apic.h | 1 +
arch/x86/kernel/smp.c | 16 ++++++++++++++--
2 files changed, 15 insertions(+), 2 deletions(-)
Index: linux/arch/x86/include/asm/apic.h
===================================================================
--- linux.orig/arch/x86/include/asm/apic.h
+++ linux/arch/x86/include/asm/apic.h
@@ -303,6 +303,7 @@ struct apic {
unsigned int *apicid);
/* ipi */
+ void (*send_IPI)(int cpu, int vector);
void (*send_IPI_mask)(const struct cpumask *mask, int vector);
void (*send_IPI_mask_allbutself)(const struct cpumask *mask,
int vector);
Index: linux/arch/x86/kernel/smp.c
===================================================================
--- linux.orig/arch/x86/kernel/smp.c
+++ linux/arch/x86/kernel/smp.c
@@ -115,6 +115,18 @@ static atomic_t stopping_cpu = ATOMIC_IN
static bool smp_no_nmi_ipi = false;
/*
+ * Helper wrapper: not all apic definitions support sending to
+ * a single CPU, so we fall back to sending to a mask.
+ */
+static void send_IPI_cpu(int cpu, int vector)
+{
+ if (apic->send_IPI)
+ apic->send_IPI(cpu, vector);
+ else
+ apic->send_IPI_mask(cpumask_of(cpu), vector);
+}
+
+/*
* this function sends a 'reschedule' IPI to another CPU.
* it goes straight through and wastes no time serializing
* anything. Worst case is that we lose a reschedule ...
@@ -125,12 +137,12 @@ static void native_smp_send_reschedule(i
WARN_ON(1);
return;
}
- apic->send_IPI_mask(cpumask_of(cpu), RESCHEDULE_VECTOR);
+ send_IPI_cpu(cpu, RESCHEDULE_VECTOR);
}
void native_send_call_func_single_ipi(int cpu)
{
- apic->send_IPI_mask(cpumask_of(cpu), CALL_FUNCTION_SINGLE_VECTOR);
+ send_IPI_cpu(cpu, CALL_FUNCTION_SINGLE_VECTOR);
}
void native_send_call_func_ipi(const struct cpumask *mask)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Linus Torvalds <tipbot@zytor.com> |
|---|---|
| Date | 2015-11-05 15:50 +0100 |
| Subject | [tip:x86/apic] x86/apic: Add a single-target IPI function to the apic |
| Message-ID | <qru1u-7Yg-79@gated-at.bofh.it> |
| In reply to | #1262718 |
Commit-ID: 539da7877275edb21a76aa02fb2c147eff02c559
Gitweb: http://git.kernel.org/tip/539da7877275edb21a76aa02fb2c147eff02c559
Author: Linus Torvalds <torvalds@linux-foundation.org>
AuthorDate: Wed, 4 Nov 2015 22:57:00 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Nov 2015 13:07:51 +0100
x86/apic: Add a single-target IPI function to the apic
We still fall back on the "send mask" versions if an apic definition
doesn't have the single-target version, but at least this allows the
(trivial) case for the common clustered x2apic case.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Borislav Petkov <bp@alien.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Travis <travis@sgi.com>
Cc: Daniel J Blueman <daniel@numascale.com>
Link: http://lkml.kernel.org/r/20151104220848.737120838@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/include/asm/apic.h | 1 +
arch/x86/kernel/smp.c | 16 ++++++++++++++--
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index a30316b..7f62ad4 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -303,6 +303,7 @@ struct apic {
unsigned int *apicid);
/* ipi */
+ void (*send_IPI)(int cpu, int vector);
void (*send_IPI_mask)(const struct cpumask *mask, int vector);
void (*send_IPI_mask_allbutself)(const struct cpumask *mask,
int vector);
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index 12c8286..1dbf590 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -115,6 +115,18 @@ static atomic_t stopping_cpu = ATOMIC_INIT(-1);
static bool smp_no_nmi_ipi = false;
/*
+ * Helper wrapper: not all apic definitions support sending to
+ * a single CPU, so we fall back to sending to a mask.
+ */
+static void send_IPI_cpu(int cpu, int vector)
+{
+ if (apic->send_IPI)
+ apic->send_IPI(cpu, vector);
+ else
+ apic->send_IPI_mask(cpumask_of(cpu), vector);
+}
+
+/*
* this function sends a 'reschedule' IPI to another CPU.
* it goes straight through and wastes no time serializing
* anything. Worst case is that we lose a reschedule ...
@@ -125,12 +137,12 @@ static void native_smp_send_reschedule(int cpu)
WARN_ON(1);
return;
}
- apic->send_IPI_mask(cpumask_of(cpu), RESCHEDULE_VECTOR);
+ send_IPI_cpu(cpu, RESCHEDULE_VECTOR);
}
void native_send_call_func_single_ipi(int cpu)
{
- apic->send_IPI_mask(cpumask_of(cpu), CALL_FUNCTION_SINGLE_VECTOR);
+ send_IPI_cpu(cpu, CALL_FUNCTION_SINGLE_VECTOR);
}
void native_send_call_func_ipi(const struct cpumask *mask)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 05/14] x86/apic: Wire up single IPI for apic_physflat |
| Message-ID | <qrflM-6Yk-21@gated-at.bofh.it> |
| In reply to | #1262713 |
Use the default implementation.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/apic_flat_64.c | 1 +
1 file changed, 1 insertion(+)
Index: linux/arch/x86/kernel/apic/apic_flat_64.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/apic_flat_64.c
+++ linux/arch/x86/kernel/apic/apic_flat_64.c
@@ -281,6 +281,7 @@ static struct apic apic_physflat = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
+ .send_IPI = default_send_IPI_single_phys,
.send_IPI_mask = default_send_IPI_mask_sequence_phys,
.send_IPI_mask_allbutself = default_send_IPI_mask_allbutself_phys,
.send_IPI_allbutself = physflat_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Thomas Gleixner <tipbot@zytor.com> |
|---|---|
| Date | 2015-11-05 15:50 +0100 |
| Subject | [tip:x86/apic] x86/apic: Wire up single IPI for apic_physflat |
| Message-ID | <qru1u-7Yg-75@gated-at.bofh.it> |
| In reply to | #1262719 |
Commit-ID: 68cd88ff8df97846eb07080f17264a4de50cb012
Gitweb: http://git.kernel.org/tip/68cd88ff8df97846eb07080f17264a4de50cb012
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Wed, 4 Nov 2015 22:57:02 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Nov 2015 13:07:52 +0100
x86/apic: Wire up single IPI for apic_physflat
Use the default implementation.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Borislav Petkov <bp@alien.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Travis <travis@sgi.com>
Cc: Daniel J Blueman <daniel@numascale.com>
Link: http://lkml.kernel.org/r/20151104220849.055046864@linutronix.de
---
arch/x86/kernel/apic/apic_flat_64.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c
index 6d3e1a6..9de25d4 100644
--- a/arch/x86/kernel/apic/apic_flat_64.c
+++ b/arch/x86/kernel/apic/apic_flat_64.c
@@ -281,6 +281,7 @@ static struct apic apic_physflat = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
+ .send_IPI = default_send_IPI_single_phys,
.send_IPI_mask = default_send_IPI_mask_sequence_phys,
.send_IPI_mask_allbutself = default_send_IPI_mask_allbutself_phys,
.send_IPI_allbutself = physflat_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 04/14] x86/apic: Remove pointless indirections from apic_physflat |
| Message-ID | <qrflM-6Yk-23@gated-at.bofh.it> |
| In reply to | #1262713 |
No value in having 32 byte extra text.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/apic_flat_64.c | 17 +++--------------
1 file changed, 3 insertions(+), 14 deletions(-)
Index: linux/arch/x86/kernel/apic/apic_flat_64.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/apic_flat_64.c
+++ linux/arch/x86/kernel/apic/apic_flat_64.c
@@ -230,17 +230,6 @@ static int physflat_acpi_madt_oem_check(
return 0;
}
-static void physflat_send_IPI_mask(const struct cpumask *cpumask, int vector)
-{
- default_send_IPI_mask_sequence_phys(cpumask, vector);
-}
-
-static void physflat_send_IPI_mask_allbutself(const struct cpumask *cpumask,
- int vector)
-{
- default_send_IPI_mask_allbutself_phys(cpumask, vector);
-}
-
static void physflat_send_IPI_allbutself(int vector)
{
default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
@@ -248,7 +237,7 @@ static void physflat_send_IPI_allbutself
static void physflat_send_IPI_all(int vector)
{
- physflat_send_IPI_mask(cpu_online_mask, vector);
+ default_send_IPI_mask_sequence_phys(cpu_online_mask, vector);
}
static int physflat_probe(void)
@@ -292,8 +281,8 @@ static struct apic apic_physflat = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
- .send_IPI_mask = physflat_send_IPI_mask,
- .send_IPI_mask_allbutself = physflat_send_IPI_mask_allbutself,
+ .send_IPI_mask = default_send_IPI_mask_sequence_phys,
+ .send_IPI_mask_allbutself = default_send_IPI_mask_allbutself_phys,
.send_IPI_allbutself = physflat_send_IPI_allbutself,
.send_IPI_all = physflat_send_IPI_all,
.send_IPI_self = apic_send_IPI_self,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Thomas Gleixner <tipbot@zytor.com> |
|---|---|
| Date | 2015-11-05 15:50 +0100 |
| Subject | [tip:x86/apic] x86/apic: Remove pointless indirections from apic_physflat |
| Message-ID | <qru1u-7Yg-81@gated-at.bofh.it> |
| In reply to | #1262720 |
Commit-ID: 449112f4f35074f1dc70d4f0e769cb14150c159c
Gitweb: http://git.kernel.org/tip/449112f4f35074f1dc70d4f0e769cb14150c159c
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Wed, 4 Nov 2015 22:57:02 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Nov 2015 13:07:52 +0100
x86/apic: Remove pointless indirections from apic_physflat
No value in having 32 byte extra text.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Borislav Petkov <bp@alien.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Travis <travis@sgi.com>
Cc: Daniel J Blueman <daniel@numascale.com>
Link: http://lkml.kernel.org/r/20151104220848.975653382@linutronix.de
---
arch/x86/kernel/apic/apic_flat_64.c | 17 +++--------------
1 file changed, 3 insertions(+), 14 deletions(-)
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c
index f92ab36..6d3e1a6 100644
--- a/arch/x86/kernel/apic/apic_flat_64.c
+++ b/arch/x86/kernel/apic/apic_flat_64.c
@@ -230,17 +230,6 @@ static int physflat_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
return 0;
}
-static void physflat_send_IPI_mask(const struct cpumask *cpumask, int vector)
-{
- default_send_IPI_mask_sequence_phys(cpumask, vector);
-}
-
-static void physflat_send_IPI_mask_allbutself(const struct cpumask *cpumask,
- int vector)
-{
- default_send_IPI_mask_allbutself_phys(cpumask, vector);
-}
-
static void physflat_send_IPI_allbutself(int vector)
{
default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
@@ -248,7 +237,7 @@ static void physflat_send_IPI_allbutself(int vector)
static void physflat_send_IPI_all(int vector)
{
- physflat_send_IPI_mask(cpu_online_mask, vector);
+ default_send_IPI_mask_sequence_phys(cpu_online_mask, vector);
}
static int physflat_probe(void)
@@ -292,8 +281,8 @@ static struct apic apic_physflat = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
- .send_IPI_mask = physflat_send_IPI_mask,
- .send_IPI_mask_allbutself = physflat_send_IPI_mask_allbutself,
+ .send_IPI_mask = default_send_IPI_mask_sequence_phys,
+ .send_IPI_mask_allbutself = default_send_IPI_mask_allbutself_phys,
.send_IPI_allbutself = physflat_send_IPI_allbutself,
.send_IPI_all = physflat_send_IPI_all,
.send_IPI_self = apic_send_IPI_self,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 08/14] x86/apic: Implement single IPI for x2apic_phys |
| Message-ID | <qrflN-6Yk-39@gated-at.bofh.it> |
| In reply to | #1262713 |
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/x2apic_phys.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
Index: linux/arch/x86/kernel/apic/x2apic_phys.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/x2apic_phys.c
+++ linux/arch/x86/kernel/apic/x2apic_phys.c
@@ -36,6 +36,17 @@ static int x2apic_acpi_madt_oem_check(ch
return x2apic_enabled() && (x2apic_phys || x2apic_fadt_phys());
}
+static void x2apic_send_IPI(int cpu, int vector)
+{
+ u32 dest = per_cpu(x86_cpu_to_apicid, cpu);
+ unsigned long flags;
+
+ x2apic_wrmsr_fence();
+ local_irq_save(flags);
+ __x2apic_send_IPI_dest(dest, vector, APIC_DEST_PHYSICAL);
+ local_irq_restore(flags);
+}
+
static void
__x2apic_send_IPI_mask(const struct cpumask *mask, int vector, int apic_dest)
{
@@ -122,6 +133,7 @@ static struct apic apic_x2apic_phys = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
+ .send_IPI = x2apic_send_IPI,
.send_IPI_mask = x2apic_send_IPI_mask,
.send_IPI_mask_allbutself = x2apic_send_IPI_mask_allbutself,
.send_IPI_allbutself = x2apic_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Thomas Gleixner <tipbot@zytor.com> |
|---|---|
| Date | 2015-11-05 15:50 +0100 |
| Subject | [tip:x86/apic] x86/apic: Implement single IPI for x2apic_phys |
| Message-ID | <qru1r-7Yg-1@gated-at.bofh.it> |
| In reply to | #1262722 |
Commit-ID: f2bffe8a3eef42a1cd3393d56acd9fe598d2119c
Gitweb: http://git.kernel.org/tip/f2bffe8a3eef42a1cd3393d56acd9fe598d2119c
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Wed, 4 Nov 2015 22:57:04 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Nov 2015 13:07:53 +0100
x86/apic: Implement single IPI for x2apic_phys
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Borislav Petkov <bp@alien.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Travis <travis@sgi.com>
Cc: Daniel J Blueman <daniel@numascale.com>
Link: http://lkml.kernel.org/r/20151104220849.296438009@linutronix.de
---
arch/x86/kernel/apic/x2apic_phys.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c
index 662e915..a1242e2 100644
--- a/arch/x86/kernel/apic/x2apic_phys.c
+++ b/arch/x86/kernel/apic/x2apic_phys.c
@@ -36,6 +36,14 @@ static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
return x2apic_enabled() && (x2apic_phys || x2apic_fadt_phys());
}
+static void x2apic_send_IPI(int cpu, int vector)
+{
+ u32 dest = per_cpu(x86_cpu_to_apicid, cpu);
+
+ x2apic_wrmsr_fence();
+ __x2apic_send_IPI_dest(dest, vector, APIC_DEST_PHYSICAL);
+}
+
static void
__x2apic_send_IPI_mask(const struct cpumask *mask, int vector, int apic_dest)
{
@@ -122,6 +130,7 @@ static struct apic apic_x2apic_phys = {
.cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and,
+ .send_IPI = x2apic_send_IPI,
.send_IPI_mask = x2apic_send_IPI_mask,
.send_IPI_mask_allbutself = x2apic_send_IPI_mask_allbutself,
.send_IPI_allbutself = x2apic_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster |
| Message-ID | <qrflN-6Yk-33@gated-at.bofh.it> |
| In reply to | #1262713 |
From: Linus Torvalds <torvalds@linux-foundation.org>
[ tglx: Split it out from the patch which provides the new callback
and wrapped it into local_irq_save/restore ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/x2apic_cluster.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
Index: linux/arch/x86/kernel/apic/x2apic_cluster.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/x2apic_cluster.c
+++ linux/arch/x86/kernel/apic/x2apic_cluster.c
@@ -23,6 +23,17 @@ static inline u32 x2apic_cluster(int cpu
return per_cpu(x86_cpu_to_logical_apicid, cpu) >> 16;
}
+static void x2apic_send_IPI(int cpu, int vector)
+{
+ u32 dest = per_cpu(x86_cpu_to_logical_apicid, cpu);
+ unsigned long flags;
+
+ x2apic_wrmsr_fence();
+ local_irq_save(flags);
+ __x2apic_send_IPI_dest(dest, vector, APIC_DEST_LOGICAL);
+ local_irq_restore(flags);
+}
+
static void
__x2apic_send_IPI_mask(const struct cpumask *mask, int vector, int apic_dest)
{
@@ -266,6 +277,7 @@ static struct apic apic_x2apic_cluster =
.cpu_mask_to_apicid_and = x2apic_cpu_mask_to_apicid_and,
+ .send_IPI = x2apic_send_IPI,
.send_IPI_mask = x2apic_send_IPI_mask,
.send_IPI_mask_allbutself = x2apic_send_IPI_mask_allbutself,
.send_IPI_allbutself = x2apic_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Linus Torvalds <torvalds@linux-foundation.org> |
|---|---|
| Date | 2015-11-05 08:10 +0100 |
| Subject | Re: [patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster |
| Message-ID | <qrmQh-3q6-13@gated-at.bofh.it> |
| In reply to | #1262724 |
On Wed, Nov 4, 2015 at 10:38 PM, Ingo Molnar <mingo@kernel.org> wrote:
>
> but in the above sequence I think we can do even better: we don't need the
> local_irq_save()/restore() I think.
Right. Thomas added that one to my patch.
I don't think he realized just *how* trivial sending a single IPI is
with the x2apic, and just how horribly nasty the mask case is in
comparison (and how nasty it is that we historically turn a the single
ipi into a mask).
Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 09:10 +0100 |
| Subject | Re: [patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster |
| Message-ID | <qrnMl-3ZY-1@gated-at.bofh.it> |
| In reply to | #1262966 |
On Wed, 4 Nov 2015, Linus Torvalds wrote: > On Wed, Nov 4, 2015 at 10:38 PM, Ingo Molnar <mingo@kernel.org> wrote: > > > > but in the above sequence I think we can do even better: we don't need the > > local_irq_save()/restore() I think. > > Right. Thomas added that one to my patch. > > I don't think he realized just *how* trivial sending a single IPI is > with the x2apic, and just how horribly nasty the mask case is in > comparison (and how nasty it is that we historically turn a the single > ipi into a mask). Yeah, I was too tired to look at the details. Will fix that up for the other trivial cases as well. Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Ingo Molnar <mingo@kernel.org> |
|---|---|
| Date | 2015-11-05 08:10 +0100 |
| Subject | Re: [patch 02/14] x86/apic: Implement single target IPI function for x2apic_cluster |
| Message-ID | <qrmQh-3q6-15@gated-at.bofh.it> |
| In reply to | #1262724 |
* Thomas Gleixner <tglx@linutronix.de> wrote:
> From: Linus Torvalds <torvalds@linux-foundation.org>
>
> [ tglx: Split it out from the patch which provides the new callback
> and wrapped it into local_irq_save/restore ]
>
> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> arch/x86/kernel/apic/x2apic_cluster.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> Index: linux/arch/x86/kernel/apic/x2apic_cluster.c
> ===================================================================
> --- linux.orig/arch/x86/kernel/apic/x2apic_cluster.c
> +++ linux/arch/x86/kernel/apic/x2apic_cluster.c
> @@ -23,6 +23,17 @@ static inline u32 x2apic_cluster(int cpu
> return per_cpu(x86_cpu_to_logical_apicid, cpu) >> 16;
> }
>
> +static void x2apic_send_IPI(int cpu, int vector)
> +{
> + u32 dest = per_cpu(x86_cpu_to_logical_apicid, cpu);
> + unsigned long flags;
> +
> + x2apic_wrmsr_fence();
> + local_irq_save(flags);
> + __x2apic_send_IPI_dest(dest, vector, APIC_DEST_LOGICAL);
> + local_irq_restore(flags);
> +}
So the series looks good to me:
Reviewed-by: Ingo Molnar <mingo@kernel.org>
but in the above sequence I think we can do even better: we don't need the
local_irq_save()/restore() I think.
The reason, this is how __x2apic_send_IPI_dest() looks like:
unsigned long cfg = __prepare_ICR(0, vector, dest);
native_x2apic_icr_write(cfg, apicid);
__prepare_ICR(), which is a confusing misnomer as it does not prepare anything
about the ICR register, it just pre-calculates some values, is obviously
interrupt-safe:
static inline unsigned int __prepare_ICR(unsigned int shortcut, int vector,
unsigned int dest)
{
unsigned int icr = shortcut | dest;
switch (vector) {
default:
icr |= APIC_DM_FIXED | vector;
break;
case NMI_VECTOR:
icr |= APIC_DM_NMI;
break;
}
return icr;
}
and native_x2apic_icr_write() is a single WRMSR:
static inline void native_x2apic_icr_write(u32 low, u32 id)
{
wrmsrl(APIC_BASE_MSR + (APIC_ICR >> 4), ((__u64) id) << 32 | low);
}
which is interrupt-safe as well.
So we can save another 10-20 cycles of CLI/POPF overhead from this hotpath.
I'd do it as a patch on top, to keep the series simpler - something like the
below. (Completely untested: may the Force be with you.)
Thanks,
Ingo
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/kernel/apic/x2apic_cluster.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
index 3329dab47efc..aca8b75c1552 100644
--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
@@ -26,12 +26,9 @@ static inline u32 x2apic_cluster(int cpu)
static void x2apic_send_IPI(int cpu, int vector)
{
u32 dest = per_cpu(x86_cpu_to_logical_apicid, cpu);
- unsigned long flags;
x2apic_wrmsr_fence();
- local_irq_save(flags);
__x2apic_send_IPI_dest(dest, vector, APIC_DEST_LOGICAL);
- local_irq_restore(flags);
}
static void
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Linus Torvalds <tipbot@zytor.com> |
|---|---|
| Date | 2015-11-05 15:50 +0100 |
| Subject | [tip:x86/apic] x86/apic: Implement single target IPI function for x2apic_cluster |
| Message-ID | <qru1s-7Yg-19@gated-at.bofh.it> |
| In reply to | #1262724 |
Commit-ID: 7b6ce46cb3d096831dea3accacee4717c66abac8
Gitweb: http://git.kernel.org/tip/7b6ce46cb3d096831dea3accacee4717c66abac8
Author: Linus Torvalds <torvalds@linux-foundation.org>
AuthorDate: Wed, 4 Nov 2015 22:57:00 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Nov 2015 13:07:52 +0100
x86/apic: Implement single target IPI function for x2apic_cluster
[ tglx: Split it out from the patch which provides the new callback ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Travis <travis@sgi.com>
Cc: Daniel J Blueman <daniel@numascale.com>
Link: http://lkml.kernel.org/r/20151104220848.817975597@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/x2apic_cluster.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
index cc8311c..aca8b75 100644
--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
@@ -23,6 +23,14 @@ static inline u32 x2apic_cluster(int cpu)
return per_cpu(x86_cpu_to_logical_apicid, cpu) >> 16;
}
+static void x2apic_send_IPI(int cpu, int vector)
+{
+ u32 dest = per_cpu(x86_cpu_to_logical_apicid, cpu);
+
+ x2apic_wrmsr_fence();
+ __x2apic_send_IPI_dest(dest, vector, APIC_DEST_LOGICAL);
+}
+
static void
__x2apic_send_IPI_mask(const struct cpumask *mask, int vector, int apic_dest)
{
@@ -266,6 +274,7 @@ static struct apic apic_x2apic_cluster = {
.cpu_mask_to_apicid_and = x2apic_cpu_mask_to_apicid_and,
+ .send_IPI = x2apic_send_IPI,
.send_IPI_mask = x2apic_send_IPI_mask,
.send_IPI_mask_allbutself = x2apic_send_IPI_mask_allbutself,
.send_IPI_allbutself = x2apic_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2015-11-05 00:10 +0100 |
| Subject | [patch 10/14] x86/apic: Implement single IPI for apic_noop |
| Message-ID | <qrflN-6Yk-35@gated-at.bofh.it> |
| In reply to | #1262713 |
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/apic_noop.c | 2 ++
1 file changed, 2 insertions(+)
Index: linux/arch/x86/kernel/apic/apic_noop.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/apic_noop.c
+++ linux/arch/x86/kernel/apic/apic_noop.c
@@ -30,6 +30,7 @@
#include <asm/e820.h>
static void noop_init_apic_ldr(void) { }
+static void noop_send_IPI(int cpu, int vector) { }
static void noop_send_IPI_mask(const struct cpumask *cpumask, int vector) { }
static void noop_send_IPI_mask_allbutself(const struct cpumask *cpumask, int vector) { }
static void noop_send_IPI_allbutself(int vector) { }
@@ -144,6 +145,7 @@ struct apic apic_noop = {
.cpu_mask_to_apicid_and = flat_cpu_mask_to_apicid_and,
+ .send_IPI = noop_send_IPI,
.send_IPI_mask = noop_send_IPI_mask,
.send_IPI_mask_allbutself = noop_send_IPI_mask_allbutself,
.send_IPI_allbutself = noop_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Thomas Gleixner <tipbot@zytor.com> |
|---|---|
| Date | 2015-11-05 15:50 +0100 |
| Subject | [tip:x86/apic] x86/apic: Implement single IPI for apic_noop |
| Message-ID | <qru1t-7Yg-47@gated-at.bofh.it> |
| In reply to | #1262725 |
Commit-ID: 4727da2eb1ec79fdc2acdd2f764b5b2aacab998c
Gitweb: http://git.kernel.org/tip/4727da2eb1ec79fdc2acdd2f764b5b2aacab998c
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Wed, 4 Nov 2015 22:57:06 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Nov 2015 13:07:53 +0100
x86/apic: Implement single IPI for apic_noop
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Borislav Petkov <bp@alien.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Travis <travis@sgi.com>
Cc: Daniel J Blueman <daniel@numascale.com>
Link: http://lkml.kernel.org/r/20151104220849.455429817@linutronix.de
---
arch/x86/kernel/apic/apic_noop.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/x86/kernel/apic/apic_noop.c b/arch/x86/kernel/apic/apic_noop.c
index 0d96749..331a7a0 100644
--- a/arch/x86/kernel/apic/apic_noop.c
+++ b/arch/x86/kernel/apic/apic_noop.c
@@ -30,6 +30,7 @@
#include <asm/e820.h>
static void noop_init_apic_ldr(void) { }
+static void noop_send_IPI(int cpu, int vector) { }
static void noop_send_IPI_mask(const struct cpumask *cpumask, int vector) { }
static void noop_send_IPI_mask_allbutself(const struct cpumask *cpumask, int vector) { }
static void noop_send_IPI_allbutself(int vector) { }
@@ -144,6 +145,7 @@ struct apic apic_noop = {
.cpu_mask_to_apicid_and = flat_cpu_mask_to_apicid_and,
+ .send_IPI = noop_send_IPI,
.send_IPI_mask = noop_send_IPI_mask,
.send_IPI_mask_allbutself = noop_send_IPI_mask_allbutself,
.send_IPI_allbutself = noop_send_IPI_allbutself,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web