summaryrefslogtreecommitdiffstats
path: root/sys/x86
diff options
context:
space:
mode:
authorroyger <royger@FreeBSD.org>2015-08-21 15:53:08 +0000
committerroyger <royger@FreeBSD.org>2015-08-21 15:53:08 +0000
commitef7f753c0456a32eb1092ed1a5ee0affd7659c57 (patch)
treeb9a2f09cf466dd32614dc7bf3758010301028efb /sys/x86
parentc91bb25afef948b9a83e4e73568fc70a59b4b0c3 (diff)
downloadFreeBSD-src-ef7f753c0456a32eb1092ed1a5ee0affd7659c57.zip
FreeBSD-src-ef7f753c0456a32eb1092ed1a5ee0affd7659c57.tar.gz
xen: allow disabling PV disks and nics
Introduce two new loader tunnables that can be used to disable PV disks and PV nics at boot time. They default to 0 and should be set to 1 (or any number different than 0) in order to disable the PV devices: hw.xen.disable_pv_disks=1 hw.xen.disable_pv_nics=1 In /boot/loader.conf will disable both PV disks and nics. Sponsored by: Citrix Systems R&D Tested by: Karl Pielorz <kpielorz_lst@tdx.co.uk> MFC after: 1 week
Diffstat (limited to 'sys/x86')
-rw-r--r--sys/x86/xen/hvm.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/sys/x86/xen/hvm.c b/sys/x86/xen/hvm.c
index 9ad196a..c969e26 100644
--- a/sys/x86/xen/hvm.c
+++ b/sys/x86/xen/hvm.c
@@ -100,8 +100,15 @@ DPCPU_DEFINE(struct vcpu_info *, vcpu_info);
shared_info_t *HYPERVISOR_shared_info;
start_info_t *HYPERVISOR_start_info;
+
+/*------------------------------ Sysctl tunables -----------------------------*/
+int xen_disable_pv_disks = 0;
+int xen_disable_pv_nics = 0;
+TUNABLE_INT("hw.xen.disable_pv_disks", &xen_disable_pv_disks);
+TUNABLE_INT("hw.xen.disable_pv_nics", &xen_disable_pv_nics);
+
#ifdef SMP
-/* XEN diverged cpu operations */
+/*---------------------- XEN diverged cpu operations -------------------------*/
static void
xen_hvm_cpu_resume(void)
{
@@ -256,21 +263,34 @@ enum {
static void
xen_hvm_disable_emulated_devices(void)
{
+ u_short disable_devs = 0;
if (xen_pv_domain()) {
/*
* No emulated devices in the PV case, so no need to unplug
* anything.
*/
+ if (xen_disable_pv_disks != 0 || xen_disable_pv_nics != 0)
+ printf("PV devices cannot be disabled in PV guests\n");
return;
}
if (inw(XEN_MAGIC_IOPORT) != XMI_MAGIC)
return;
- if (bootverbose)
- printf("XEN: Disabling emulated block and network devices\n");
- outw(XEN_MAGIC_IOPORT, XMI_UNPLUG_IDE_DISKS|XMI_UNPLUG_NICS);
+ if (xen_disable_pv_disks == 0) {
+ if (bootverbose)
+ printf("XEN: disabling emulated disks\n");
+ disable_devs |= XMI_UNPLUG_IDE_DISKS;
+ }
+ if (xen_disable_pv_nics == 0) {
+ if (bootverbose)
+ printf("XEN: disabling emulated nics\n");
+ disable_devs |= XMI_UNPLUG_NICS;
+ }
+
+ if (disable_devs != 0)
+ outw(XEN_MAGIC_IOPORT, disable_devs);
}
static void
OpenPOWER on IntegriCloud