svn commit: r286999 - in head/sys: dev/xen/blkfront dev/xen/netfront x86/xen xen
Roger Pau Monné
royger at FreeBSD.org
Fri Aug 21 15:53:10 UTC 2015
Author: royger
Date: Fri Aug 21 15:53:08 2015
New Revision: 286999
URL: https://svnweb.freebsd.org/changeset/base/286999
Log:
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 at tdx.co.uk>
MFC after: 1 week
Modified:
head/sys/dev/xen/blkfront/blkfront.c
head/sys/dev/xen/netfront/netfront.c
head/sys/x86/xen/hvm.c
head/sys/xen/xen-os.h
Modified: head/sys/dev/xen/blkfront/blkfront.c
==============================================================================
--- head/sys/dev/xen/blkfront/blkfront.c Fri Aug 21 15:30:50 2015 (r286998)
+++ head/sys/dev/xen/blkfront/blkfront.c Fri Aug 21 15:53:08 2015 (r286999)
@@ -1366,6 +1366,9 @@ xbd_probe(device_t dev)
if (strcmp(xenbus_get_type(dev), "vbd") != 0)
return (ENXIO);
+ if (xen_hvm_domain() && xen_disable_pv_disks != 0)
+ return (ENXIO);
+
if (xen_hvm_domain()) {
int error;
char *type;
Modified: head/sys/dev/xen/netfront/netfront.c
==============================================================================
--- head/sys/dev/xen/netfront/netfront.c Fri Aug 21 15:30:50 2015 (r286998)
+++ head/sys/dev/xen/netfront/netfront.c Fri Aug 21 15:53:08 2015 (r286999)
@@ -445,6 +445,9 @@ static int
netfront_probe(device_t dev)
{
+ if (xen_hvm_domain() && xen_disable_pv_nics != 0)
+ return (ENXIO);
+
if (!strcmp(xenbus_get_type(dev), "vif")) {
device_set_desc(dev, "Virtual Network Interface");
return (0);
Modified: head/sys/x86/xen/hvm.c
==============================================================================
--- head/sys/x86/xen/hvm.c Fri Aug 21 15:30:50 2015 (r286998)
+++ head/sys/x86/xen/hvm.c Fri Aug 21 15:53:08 2015 (r286999)
@@ -100,8 +100,15 @@ DPCPU_DEFINE(struct vcpu_info *, vcpu_in
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
Modified: head/sys/xen/xen-os.h
==============================================================================
--- head/sys/xen/xen-os.h Fri Aug 21 15:30:50 2015 (r286998)
+++ head/sys/xen/xen-os.h Fri Aug 21 15:53:08 2015 (r286999)
@@ -56,6 +56,9 @@ extern start_info_t *HYPERVISOR_start_in
/* XXX: we need to get rid of this and use HYPERVISOR_start_info directly */
extern char *console_page;
+extern int xen_disable_pv_disks;
+extern int xen_disable_pv_nics;
+
enum xen_domain_type {
XEN_NATIVE, /* running on bare hardware */
XEN_PV_DOMAIN, /* running in a PV domain */
More information about the svn-src-all
mailing list