Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1371209

[PATCH v4 4/6] xen: add xen_pin_vcpu() to support calling functions on a dedicated pcpu

From Juergen Gross <jgross@suse.com>
Newsgroups linux.kernel
Subject [PATCH v4 4/6] xen: add xen_pin_vcpu() to support calling functions on a dedicated pcpu
Date 2016-04-05 07:20 +0200
Message-ID <rkrzc-6vm-7@gated-at.bofh.it> (permalink)
References <rkrzc-6vm-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Some hardware models (e.g. Dell Studio 1555 laptops) require calls to
the firmware to be issued on cpu 0 only. As Dom0 might have to use
these calls, add xen_pin_vcpu() to achieve this functionality.

In case either the domain doesn't have the privilege to make the
related hypercall or the hypervisor isn't supporting it, issue a
warning once and disable further pinning attempts.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 arch/x86/xen/enlighten.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 880862c..7907bcf8 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1885,6 +1885,45 @@ static void xen_set_cpu_features(struct cpuinfo_x86 *c)
 	}
 }
 
+static void xen_pin_vcpu(int cpu)
+{
+	static bool disable_pinning;
+	struct sched_pin_override pin_override;
+	int ret;
+
+	if (disable_pinning)
+		return;
+
+	pin_override.pcpu = cpu;
+	ret = HYPERVISOR_sched_op(SCHEDOP_pin_override, &pin_override);
+	if (cpu < 0)
+		return;
+
+	switch (ret) {
+	case -ENOSYS:
+		pr_warn("The kernel tried to call a function on physical cpu %d, but Xen isn't\n"
+			"supporting this. In case of problems you might consider vcpu pinning.\n",
+			cpu);
+		disable_pinning = true;
+		break;
+	case -EPERM:
+		WARN(1, "Trying to pin vcpu without having privilege to do so\n");
+		disable_pinning = true;
+		break;
+	case -EINVAL:
+	case -EBUSY:
+		pr_warn("The kernel tried to call a function on physical cpu %d, but this cpu\n"
+			"seems not to be available. Please check your Xen cpu configuration.\n",
+			cpu);
+		break;
+	case 0:
+		break;
+	default:
+		WARN(1, "rc %d while trying to pin vcpu\n", ret);
+		disable_pinning = true;
+	}
+}
+
 const struct hypervisor_x86 x86_hyper_xen = {
 	.name			= "Xen",
 	.detect			= xen_platform,
@@ -1893,6 +1932,7 @@ const struct hypervisor_x86 x86_hyper_xen = {
 #endif
 	.x2apic_available	= xen_x2apic_para_available,
 	.set_cpu_features       = xen_set_cpu_features,
+	.pin_vcpu               = xen_pin_vcpu,
 };
 EXPORT_SYMBOL(x86_hyper_xen);
 
-- 
2.6.2

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v4 0/6] Support calling functions on dedicated physical cpu Juergen Gross <jgross@suse.com> - 2016-04-05 07:20 +0200
  [PATCH v4 1/6] xen: sync xen header Juergen Gross <jgross@suse.com> - 2016-04-05 07:20 +0200
    Re: [Xen-devel] [PATCH v4 1/6] xen: sync xen header David Vrabel <david.vrabel@citrix.com> - 2016-04-05 11:40 +0200
  [PATCH v4 4/6] xen: add xen_pin_vcpu() to support calling functions on a dedicated pcpu Juergen Gross <jgross@suse.com> - 2016-04-05 07:20 +0200
    Re: [Xen-devel] [PATCH v4 4/6] xen: add xen_pin_vcpu() to support  calling functions on a dedicated pcpu David Vrabel <david.vrabel@citrix.com> - 2016-04-05 11:50 +0200
      Re: [Xen-devel] [PATCH v4 4/6] xen: add xen_pin_vcpu() to support  calling functions on a dedicated pcpu David Vrabel <david.vrabel@citrix.com> - 2016-04-05 12:10 +0200
      Re: [Xen-devel] [PATCH v4 4/6] xen: add xen_pin_vcpu() to support  calling functions on a dedicated pcpu Juergen Gross <jgross@suse.com> - 2016-04-05 12:10 +0200
  [PATCH v4 3/6] smp: add function to execute a function synchronously on a cpu Juergen Gross <jgross@suse.com> - 2016-04-05 07:20 +0200
    Re: [PATCH v4 3/6] smp: add function to execute a function  synchronously on a cpu Peter Zijlstra <peterz@infradead.org> - 2016-04-05 10:20 +0200
      Re: [PATCH v4 3/6] smp: add function to execute a function  synchronously on a cpu Juergen Gross <jgross@suse.com> - 2016-04-05 12:10 +0200
  [PATCH v4 6/6] hwmon: use smp_call_on_cpu() for dell-smm i8k Juergen Gross <jgross@suse.com> - 2016-04-05 07:20 +0200
    Re: [PATCH v4 6/6] hwmon: use smp_call_on_cpu() for dell-smm i8k Guenter Roeck <linux@roeck-us.net> - 2016-04-05 17:00 +0200
      Re: [PATCH v4 6/6] hwmon: use smp_call_on_cpu() for dell-smm i8k Pali Rohár <pali.rohar@gmail.com> - 2016-04-05 21:40 +0200
  [PATCH v4 2/6] virt, sched: add generic vcpu pinning support Juergen Gross <jgross@suse.com> - 2016-04-05 07:20 +0200
  [PATCH v4 5/6] dcdbas: make use of smp_call_on_cpu() Juergen Gross <jgross@suse.com> - 2016-04-05 07:20 +0200

csiph-web