mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
* Compat machine types for QEMU 7.2
* Add feature bit for the "processor-activity-instrumentation extension" * Fix emulation of CLFIT and CLGIT instructions * Fix hugepages support on s390x with the memfd memory-backend -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmMOD0cRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbWrUg//YyjsnuUoKhea7PmnL6WUOyD0jZoMtDK3 IwRzneLfTPQneStqCc1gtoWMelhP68wa/t2ygfwB5hOrLKz8r0aIvnsfEgc8t++R 58IwClD9Z2d26lCMzIlW3A4ACQfZVk96wtqPmfShMHKuZePrA/oM4l7R+EItP9nl s1WYUZ0ia/qogJ2Wr+MvDGbURv37DqYJ2OuY8WCrIX9trQxUwcydZKMv1ca55mpn GfZNBbTuqhLMf+r4NmxNzHnMayGtWOyaISStJBhGDlRJyKjDsy1ghAXDMa1WFRup lj6mBoq0F19PCnjI9AUFVNvPhuj/1Ku+YkVwrImleSdBBmgaUx+LWwFXU+stnQv7 9bYosdTJ55BJ8YmRn1w00b+rIVg4SvJimQJc+BizWe7tdpc+E1AhBerUC4bwZxZw NRiPwSraym2b9/mpv7/fzUGECEpP37IHHZtIa37OO3d48NuaHpFHhpcskbmfCIwP K19Jqc5cyLf7/iEliOo+BVcMVDQSL4M4x7CePpO1Kd83RmDEoBQlQDL9ZcXYAefz yY7OYwi2DfO893umDNuXwyN6b3HwOjDztFy2emgVRfwFIsm4jWnsByRsjVasaIvd kmfCjZj0URBoUCfJiKtrpzgF+uup8n54uJxtbsWyf83xdMz/zpsDXAnm1eG6qZq3 7MD1+akz2Ak= =lJy4 -----END PGP SIGNATURE----- Merge tag 's390x-pull-request-2022-08-30' of https://gitlab.com/thuth/qemu into staging * Compat machine types for QEMU 7.2 * Add feature bit for the "processor-activity-instrumentation extension" * Fix emulation of CLFIT and CLGIT instructions * Fix hugepages support on s390x with the memfd memory-backend # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmMOD0cRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbWrUg//YyjsnuUoKhea7PmnL6WUOyD0jZoMtDK3 # IwRzneLfTPQneStqCc1gtoWMelhP68wa/t2ygfwB5hOrLKz8r0aIvnsfEgc8t++R # 58IwClD9Z2d26lCMzIlW3A4ACQfZVk96wtqPmfShMHKuZePrA/oM4l7R+EItP9nl # s1WYUZ0ia/qogJ2Wr+MvDGbURv37DqYJ2OuY8WCrIX9trQxUwcydZKMv1ca55mpn # GfZNBbTuqhLMf+r4NmxNzHnMayGtWOyaISStJBhGDlRJyKjDsy1ghAXDMa1WFRup # lj6mBoq0F19PCnjI9AUFVNvPhuj/1Ku+YkVwrImleSdBBmgaUx+LWwFXU+stnQv7 # 9bYosdTJ55BJ8YmRn1w00b+rIVg4SvJimQJc+BizWe7tdpc+E1AhBerUC4bwZxZw # NRiPwSraym2b9/mpv7/fzUGECEpP37IHHZtIa37OO3d48NuaHpFHhpcskbmfCIwP # K19Jqc5cyLf7/iEliOo+BVcMVDQSL4M4x7CePpO1Kd83RmDEoBQlQDL9ZcXYAefz # yY7OYwi2DfO893umDNuXwyN6b3HwOjDztFy2emgVRfwFIsm4jWnsByRsjVasaIvd # kmfCjZj0URBoUCfJiKtrpzgF+uup8n54uJxtbsWyf83xdMz/zpsDXAnm1eG6qZq3 # 7MD1+akz2Ak= # =lJy4 # -----END PGP SIGNATURE----- # gpg: Signature made Tue 30 Aug 2022 09:23:19 EDT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 's390x-pull-request-2022-08-30' of https://gitlab.com/thuth/qemu: util/mmap-alloc: Remove qemu_mempath_getpagesize() softmmu/physmem: Remove the ifdef __linux__ around the pagesize functions backends/hostmem: Fix support of memory-backend-memfd in qemu_maxrampagesize() target/s390x: Fix CLFIT and CLGIT immediate size s390x/cpumodel: add stfl197 processor-activity-instrumentation extension 1 hw: Add compat machines for 7.2 Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
3a2a29ebbd
@ -306,22 +306,12 @@ bool host_memory_backend_is_mapped(HostMemoryBackend *backend)
|
||||
return backend->is_mapped;
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
size_t host_memory_backend_pagesize(HostMemoryBackend *memdev)
|
||||
{
|
||||
Object *obj = OBJECT(memdev);
|
||||
char *path = object_property_get_str(obj, "mem-path", NULL);
|
||||
size_t pagesize = qemu_mempath_getpagesize(path);
|
||||
|
||||
g_free(path);
|
||||
size_t pagesize = qemu_ram_pagesize(memdev->mr.ram_block);
|
||||
g_assert(pagesize >= qemu_real_host_page_size());
|
||||
return pagesize;
|
||||
}
|
||||
#else
|
||||
size_t host_memory_backend_pagesize(HostMemoryBackend *memdev)
|
||||
{
|
||||
return qemu_real_host_page_size();
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
host_memory_backend_memory_complete(UserCreatable *uc, Error **errp)
|
||||
|
@ -3094,10 +3094,17 @@ static void machvirt_machine_init(void)
|
||||
}
|
||||
type_init(machvirt_machine_init);
|
||||
|
||||
static void virt_machine_7_1_options(MachineClass *mc)
|
||||
static void virt_machine_7_2_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_VIRT_MACHINE_AS_LATEST(7, 1)
|
||||
DEFINE_VIRT_MACHINE_AS_LATEST(7, 2)
|
||||
|
||||
static void virt_machine_7_1_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_7_2_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(7, 1)
|
||||
|
||||
static void virt_machine_7_0_options(MachineClass *mc)
|
||||
{
|
||||
|
@ -40,6 +40,9 @@
|
||||
#include "hw/virtio/virtio-pci.h"
|
||||
#include "qom/object_interfaces.h"
|
||||
|
||||
GlobalProperty hw_compat_7_1[] = {};
|
||||
const size_t hw_compat_7_1_len = G_N_ELEMENTS(hw_compat_7_1);
|
||||
|
||||
GlobalProperty hw_compat_7_0[] = {
|
||||
{ "arm-gicv3-common", "force-8-bit-prio", "on" },
|
||||
{ "nvme-ns", "eui64-default", "on"},
|
||||
|
@ -107,6 +107,9 @@
|
||||
{ "qemu64-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },\
|
||||
{ "athlon-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },
|
||||
|
||||
GlobalProperty pc_compat_7_1[] = {};
|
||||
const size_t pc_compat_7_1_len = G_N_ELEMENTS(pc_compat_7_1);
|
||||
|
||||
GlobalProperty pc_compat_7_0[] = {};
|
||||
const size_t pc_compat_7_0_len = G_N_ELEMENTS(pc_compat_7_0);
|
||||
|
||||
|
@ -432,7 +432,7 @@ static void pc_i440fx_machine_options(MachineClass *m)
|
||||
machine_class_allow_dynamic_sysbus_dev(m, TYPE_VMBUS_BRIDGE);
|
||||
}
|
||||
|
||||
static void pc_i440fx_7_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_7_2_machine_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_i440fx_machine_options(m);
|
||||
@ -442,6 +442,18 @@ static void pc_i440fx_7_1_machine_options(MachineClass *m)
|
||||
pcmc->legacy_no_rng_seed = true;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v7_2, "pc-i440fx-7.2", NULL,
|
||||
pc_i440fx_7_2_machine_options);
|
||||
|
||||
static void pc_i440fx_7_1_machine_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_7_2_machine_options(m);
|
||||
m->alias = NULL;
|
||||
m->is_default = false;
|
||||
compat_props_add(m->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_1, pc_compat_7_1_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v7_1, "pc-i440fx-7.1", NULL,
|
||||
pc_i440fx_7_1_machine_options);
|
||||
|
||||
|
@ -370,7 +370,7 @@ static void pc_q35_machine_options(MachineClass *m)
|
||||
m->max_cpus = 288;
|
||||
}
|
||||
|
||||
static void pc_q35_7_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_7_2_machine_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_q35_machine_options(m);
|
||||
@ -379,6 +379,17 @@ static void pc_q35_7_1_machine_options(MachineClass *m)
|
||||
pcmc->legacy_no_rng_seed = true;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v7_2, "pc-q35-7.2", NULL,
|
||||
pc_q35_7_2_machine_options);
|
||||
|
||||
static void pc_q35_7_1_machine_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_7_2_machine_options(m);
|
||||
m->alias = NULL;
|
||||
compat_props_add(m->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_1, pc_compat_7_1_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v7_1, "pc-q35-7.1", NULL,
|
||||
pc_q35_7_1_machine_options);
|
||||
|
||||
|
@ -322,10 +322,17 @@ type_init(virt_machine_register_types)
|
||||
} \
|
||||
type_init(machvirt_machine_##major##_##minor##_init);
|
||||
|
||||
static void virt_machine_7_1_options(MachineClass *mc)
|
||||
static void virt_machine_7_2_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(7, 1, true)
|
||||
DEFINE_VIRT_MACHINE(7, 2, true)
|
||||
|
||||
static void virt_machine_7_1_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_7_2_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(7, 1, false)
|
||||
|
||||
static void virt_machine_7_0_options(MachineClass *mc)
|
||||
{
|
||||
|
@ -4731,14 +4731,25 @@ static void spapr_machine_latest_class_options(MachineClass *mc)
|
||||
type_init(spapr_machine_register_##suffix)
|
||||
|
||||
/*
|
||||
* pseries-7.1
|
||||
* pseries-7.2
|
||||
*/
|
||||
static void spapr_machine_7_1_class_options(MachineClass *mc)
|
||||
static void spapr_machine_7_2_class_options(MachineClass *mc)
|
||||
{
|
||||
/* Defaults for the latest behaviour inherited from the base class */
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(7_1, "7.1", true);
|
||||
DEFINE_SPAPR_MACHINE(7_2, "7.2", true);
|
||||
|
||||
/*
|
||||
* pseries-7.1
|
||||
*/
|
||||
static void spapr_machine_7_1_class_options(MachineClass *mc)
|
||||
{
|
||||
spapr_machine_7_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(7_1, "7.1", false);
|
||||
|
||||
/*
|
||||
* pseries-7.0
|
||||
|
@ -792,14 +792,27 @@ bool css_migration_enabled(void)
|
||||
} \
|
||||
type_init(ccw_machine_register_##suffix)
|
||||
|
||||
static void ccw_machine_7_2_instance_options(MachineState *machine)
|
||||
{
|
||||
}
|
||||
|
||||
static void ccw_machine_7_2_class_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_CCW_MACHINE(7_2, "7.2", true);
|
||||
|
||||
static void ccw_machine_7_1_instance_options(MachineState *machine)
|
||||
{
|
||||
ccw_machine_7_2_instance_options(machine);
|
||||
s390_cpudef_featoff_greater(16, 1, S390_FEAT_PAIE);
|
||||
}
|
||||
|
||||
static void ccw_machine_7_1_class_options(MachineClass *mc)
|
||||
{
|
||||
ccw_machine_7_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(7_1, "7.1", true);
|
||||
DEFINE_CCW_MACHINE(7_1, "7.1", false);
|
||||
|
||||
static void ccw_machine_7_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -379,6 +379,9 @@ struct MachineState {
|
||||
} \
|
||||
type_init(machine_initfn##_register_types)
|
||||
|
||||
extern GlobalProperty hw_compat_7_1[];
|
||||
extern const size_t hw_compat_7_1_len;
|
||||
|
||||
extern GlobalProperty hw_compat_7_0[];
|
||||
extern const size_t hw_compat_7_0_len;
|
||||
|
||||
|
@ -200,6 +200,9 @@ void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
|
||||
/* sgx.c */
|
||||
void pc_machine_init_sgx_epc(PCMachineState *pcms);
|
||||
|
||||
extern GlobalProperty pc_compat_7_1[];
|
||||
extern const size_t pc_compat_7_1_len;
|
||||
|
||||
extern GlobalProperty pc_compat_7_0[];
|
||||
extern const size_t pc_compat_7_0_len;
|
||||
|
||||
|
@ -4,8 +4,6 @@
|
||||
|
||||
size_t qemu_fd_getpagesize(int fd);
|
||||
|
||||
size_t qemu_mempath_getpagesize(const char *mem_path);
|
||||
|
||||
/**
|
||||
* qemu_ram_mmap: mmap anonymous memory, the specified file or device.
|
||||
*
|
||||
|
@ -1331,13 +1331,6 @@ GString *ram_block_format(void)
|
||||
return buf;
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
/*
|
||||
* FIXME TOCTTOU: this iterates over memory backends' mem-path, which
|
||||
* may or may not name the same files / on the same filesystem now as
|
||||
* when we actually open and map them. Iterate over the file
|
||||
* descriptors instead, and use qemu_fd_getpagesize().
|
||||
*/
|
||||
static int find_min_backend_pagesize(Object *obj, void *opaque)
|
||||
{
|
||||
long *hpsize_min = opaque;
|
||||
@ -1391,16 +1384,6 @@ long qemu_maxrampagesize(void)
|
||||
object_child_foreach(memdev_root, find_max_backend_pagesize, &pagesize);
|
||||
return pagesize;
|
||||
}
|
||||
#else
|
||||
long qemu_minrampagesize(void)
|
||||
{
|
||||
return qemu_real_host_page_size();
|
||||
}
|
||||
long qemu_maxrampagesize(void)
|
||||
{
|
||||
return qemu_real_host_page_size();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_POSIX
|
||||
static int64_t get_file_size(int fd)
|
||||
|
@ -114,6 +114,7 @@ DEF_FEAT(VECTOR_PACKED_DECIMAL_ENH2, "vxpdeh2", STFL, 192, "Vector-Packed-Decima
|
||||
DEF_FEAT(BEAR_ENH, "beareh", STFL, 193, "BEAR-enhancement facility")
|
||||
DEF_FEAT(RDP, "rdp", STFL, 194, "Reset-DAT-protection facility")
|
||||
DEF_FEAT(PAI, "pai", STFL, 196, "Processor-Activity-Instrumentation facility")
|
||||
DEF_FEAT(PAIE, "paie", STFL, 197, "Processor-Activity-Instrumentation extension-1")
|
||||
|
||||
/* Features exposed via SCLP SCCB Byte 80 - 98 (bit numbers relative to byte-80) */
|
||||
DEF_FEAT(SIE_GSLS, "gsls", SCLP_CONF_CHAR, 40, "SIE: Guest-storage-limit-suppression facility")
|
||||
|
@ -575,6 +575,7 @@ static uint16_t full_GEN16_GA1[] = {
|
||||
S390_FEAT_BEAR_ENH,
|
||||
S390_FEAT_RDP,
|
||||
S390_FEAT_PAI,
|
||||
S390_FEAT_PAIE,
|
||||
};
|
||||
|
||||
|
||||
@ -669,6 +670,7 @@ static uint16_t default_GEN16_GA1[] = {
|
||||
S390_FEAT_BEAR_ENH,
|
||||
S390_FEAT_RDP,
|
||||
S390_FEAT_PAI,
|
||||
S390_FEAT_PAIE,
|
||||
};
|
||||
|
||||
/* QEMU (CPU model) features */
|
||||
|
@ -290,8 +290,8 @@
|
||||
D(0xb961, CLGRT, RRF_c, GIE, r1_o, r2_o, 0, 0, ct, 0, 1)
|
||||
D(0xeb23, CLT, RSY_b, MIE, r1_32u, m2_32u, 0, 0, ct, 0, 1)
|
||||
D(0xeb2b, CLGT, RSY_b, MIE, r1_o, m2_64, 0, 0, ct, 0, 1)
|
||||
D(0xec73, CLFIT, RIE_a, GIE, r1_32u, i2_32u, 0, 0, ct, 0, 1)
|
||||
D(0xec71, CLGIT, RIE_a, GIE, r1_o, i2_32u, 0, 0, ct, 0, 1)
|
||||
D(0xec73, CLFIT, RIE_a, GIE, r1_32u, i2_16u, 0, 0, ct, 0, 1)
|
||||
D(0xec71, CLGIT, RIE_a, GIE, r1_o, i2_16u, 0, 0, ct, 0, 1)
|
||||
|
||||
/* CONVERT TO DECIMAL */
|
||||
C(0x4e00, CVD, RX_a, Z, r1_o, a2, 0, 0, cvd, 0)
|
||||
|
@ -53,37 +53,6 @@ size_t qemu_fd_getpagesize(int fd)
|
||||
return qemu_real_host_page_size();
|
||||
}
|
||||
|
||||
size_t qemu_mempath_getpagesize(const char *mem_path)
|
||||
{
|
||||
#ifdef CONFIG_LINUX
|
||||
struct statfs fs;
|
||||
int ret;
|
||||
|
||||
if (mem_path) {
|
||||
do {
|
||||
ret = statfs(mem_path, &fs);
|
||||
} while (ret != 0 && errno == EINTR);
|
||||
|
||||
if (ret != 0) {
|
||||
fprintf(stderr, "Couldn't statfs() memory path: %s\n",
|
||||
strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (fs.f_type == HUGETLBFS_MAGIC) {
|
||||
/* It's hugepage, return the huge page size */
|
||||
return fs.f_bsize;
|
||||
}
|
||||
}
|
||||
#ifdef __sparc__
|
||||
/* SPARC Linux needs greater alignment than the pagesize */
|
||||
return QEMU_VMALLOC_ALIGN;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return qemu_real_host_page_size();
|
||||
}
|
||||
|
||||
#define OVERCOMMIT_MEMORY_PATH "/proc/sys/vm/overcommit_memory"
|
||||
static bool map_noreserve_effective(int fd, uint32_t qemu_map_flags)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user