s390x/s390-virtio-ccw: add zpcii-disable machine property
The zpcii-disable machine property can be used to force-disable the use of zPCI interpretation facilities for a VM. By default, this setting will be off for machine 7.2 and newer. Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> Message-Id: <20220902172737.170349-9-mjrosato@linux.ibm.com> Reviewed-by: Thomas Huth <thuth@redhat.com> [thuth: Fix contextual conflict in ccw_machine_7_1_instance_options()] Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
9ee8f7e46a
commit
59d1ce4439
@ -22,7 +22,9 @@
|
|||||||
|
|
||||||
bool s390_pci_kvm_interp_allowed(void)
|
bool s390_pci_kvm_interp_allowed(void)
|
||||||
{
|
{
|
||||||
return kvm_s390_get_zpci_op() && !s390_is_pv();
|
return (kvm_s390_get_zpci_op() && !s390_is_pv() &&
|
||||||
|
!object_property_get_bool(OBJECT(qdev_get_machine()),
|
||||||
|
"zpcii-disable", NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
int s390_pci_kvm_aif_enable(S390PCIBusDevice *pbdev, ZpciFib *fib, bool assist)
|
int s390_pci_kvm_aif_enable(S390PCIBusDevice *pbdev, ZpciFib *fib, bool assist)
|
||||||
|
@ -645,6 +645,21 @@ static inline void machine_set_dea_key_wrap(Object *obj, bool value,
|
|||||||
ms->dea_key_wrap = value;
|
ms->dea_key_wrap = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool machine_get_zpcii_disable(Object *obj, Error **errp)
|
||||||
|
{
|
||||||
|
S390CcwMachineState *ms = S390_CCW_MACHINE(obj);
|
||||||
|
|
||||||
|
return ms->zpcii_disable;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void machine_set_zpcii_disable(Object *obj, bool value,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
S390CcwMachineState *ms = S390_CCW_MACHINE(obj);
|
||||||
|
|
||||||
|
ms->zpcii_disable = value;
|
||||||
|
}
|
||||||
|
|
||||||
static S390CcwMachineClass *current_mc;
|
static S390CcwMachineClass *current_mc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -740,6 +755,13 @@ static inline void s390_machine_initfn(Object *obj)
|
|||||||
"Up to 8 chars in set of [A-Za-z0-9. ] (lower case chars converted"
|
"Up to 8 chars in set of [A-Za-z0-9. ] (lower case chars converted"
|
||||||
" to upper case) to pass to machine loader, boot manager,"
|
" to upper case) to pass to machine loader, boot manager,"
|
||||||
" and guest kernel");
|
" and guest kernel");
|
||||||
|
|
||||||
|
object_property_add_bool(obj, "zpcii-disable",
|
||||||
|
machine_get_zpcii_disable,
|
||||||
|
machine_set_zpcii_disable);
|
||||||
|
object_property_set_description(obj, "zpcii-disable",
|
||||||
|
"disable zPCI interpretation facilties");
|
||||||
|
object_property_set_bool(obj, "zpcii-disable", false, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo ccw_machine_info = {
|
static const TypeInfo ccw_machine_info = {
|
||||||
@ -804,10 +826,12 @@ DEFINE_CCW_MACHINE(7_2, "7.2", true);
|
|||||||
static void ccw_machine_7_1_instance_options(MachineState *machine)
|
static void ccw_machine_7_1_instance_options(MachineState *machine)
|
||||||
{
|
{
|
||||||
static const S390FeatInit qemu_cpu_feat = { S390_FEAT_LIST_QEMU_V7_1 };
|
static const S390FeatInit qemu_cpu_feat = { S390_FEAT_LIST_QEMU_V7_1 };
|
||||||
|
S390CcwMachineState *ms = S390_CCW_MACHINE(machine);
|
||||||
|
|
||||||
ccw_machine_7_2_instance_options(machine);
|
ccw_machine_7_2_instance_options(machine);
|
||||||
s390_cpudef_featoff_greater(16, 1, S390_FEAT_PAIE);
|
s390_cpudef_featoff_greater(16, 1, S390_FEAT_PAIE);
|
||||||
s390_set_qemu_cpu_model(0x8561, 15, 1, qemu_cpu_feat);
|
s390_set_qemu_cpu_model(0x8561, 15, 1, qemu_cpu_feat);
|
||||||
|
ms->zpcii_disable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ccw_machine_7_1_class_options(MachineClass *mc)
|
static void ccw_machine_7_1_class_options(MachineClass *mc)
|
||||||
|
@ -27,6 +27,7 @@ struct S390CcwMachineState {
|
|||||||
bool aes_key_wrap;
|
bool aes_key_wrap;
|
||||||
bool dea_key_wrap;
|
bool dea_key_wrap;
|
||||||
bool pv;
|
bool pv;
|
||||||
|
bool zpcii_disable;
|
||||||
uint8_t loadparm[8];
|
uint8_t loadparm[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -37,7 +37,8 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
|
|||||||
" memory-encryption=@var{} memory encryption object to use (default=none)\n"
|
" memory-encryption=@var{} memory encryption object to use (default=none)\n"
|
||||||
" hmat=on|off controls ACPI HMAT support (default=off)\n"
|
" hmat=on|off controls ACPI HMAT support (default=off)\n"
|
||||||
" memory-backend='backend-id' specifies explicitly provided backend for main RAM (default=none)\n"
|
" memory-backend='backend-id' specifies explicitly provided backend for main RAM (default=none)\n"
|
||||||
" cxl-fmw.0.targets.0=firsttarget,cxl-fmw.0.targets.1=secondtarget,cxl-fmw.0.size=size[,cxl-fmw.0.interleave-granularity=granularity]\n",
|
" cxl-fmw.0.targets.0=firsttarget,cxl-fmw.0.targets.1=secondtarget,cxl-fmw.0.size=size[,cxl-fmw.0.interleave-granularity=granularity]\n"
|
||||||
|
" zpcii-disable=on|off disables zPCI interpretation facilities (default=off)\n",
|
||||||
QEMU_ARCH_ALL)
|
QEMU_ARCH_ALL)
|
||||||
SRST
|
SRST
|
||||||
``-machine [type=]name[,prop=value[,...]]``
|
``-machine [type=]name[,prop=value[,...]]``
|
||||||
@ -157,6 +158,11 @@ SRST
|
|||||||
::
|
::
|
||||||
|
|
||||||
-machine cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=128G,cxl-fmw.0.interleave-granularity=512k
|
-machine cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=128G,cxl-fmw.0.interleave-granularity=512k
|
||||||
|
|
||||||
|
``zpcii-disable=on|off``
|
||||||
|
Disables zPCI interpretation facilties on s390-ccw hosts.
|
||||||
|
This feature can be used to disable hardware virtual assists
|
||||||
|
related to zPCI devices. The default is off.
|
||||||
ERST
|
ERST
|
||||||
|
|
||||||
DEF("M", HAS_ARG, QEMU_OPTION_M,
|
DEF("M", HAS_ARG, QEMU_OPTION_M,
|
||||||
|
@ -236,6 +236,10 @@ static QemuOptsList machine_opts = {
|
|||||||
.help = "Up to 8 chars in set of [A-Za-z0-9. ](lower case chars"
|
.help = "Up to 8 chars in set of [A-Za-z0-9. ](lower case chars"
|
||||||
" converted to upper case) to pass to machine"
|
" converted to upper case) to pass to machine"
|
||||||
" loader, boot manager, and guest kernel",
|
" loader, boot manager, and guest kernel",
|
||||||
|
},{
|
||||||
|
.name = "zpcii-disable",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "disable zPCI interpretation facilities",
|
||||||
},
|
},
|
||||||
{ /* End of list */ }
|
{ /* End of list */ }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user