Couple of s390x patches:
- some PCI cleanups - fix build error due to uuid rework - fix potential deadlock in sigp handling - enable ccw devices in BIOS and enforce checking in QEMU -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (GNU/Linux) iQIcBAABAgAGBQJX66kHAAoJEBF7vIC1phx8hjMP/R8GjEMBR9E6eL9fJBoxJ3aV J+Z2vniWuElJ6uYOkB5TqeGREU+7GrU4Ot9++LbU+CIwnnWflYwlydQSvqpVVgNj omvXRsgJRCuS+wT+Hpusuho7ZqmQWB5xkAphPKNtMPD4YL6FFthwBv0UOzOx/pcg G5OoK1wfALfYmFD2H9AOD1I8TwFTo8s9Sl/tFNL/77nmvJJ7ij2V30wL5cIY+SVP zod2iQ3qSOnjQZmrX9hyFGTR5hbG+dgsRHI/sjidUkboWyQT1RD4eUYS+16Hs2hy LQHbAJZbiX88aNiaKXTrKCKQaQd56/TS9aUWEhQs4nWiaZoWbwNkaiz0tEwYpnCa BAQSZ5rpDEoo6SKKnVp/xt9raK99M5aNNbSaqjpwp/tPUBys0fu/GoPyBU6W18N6 VvQrp5J1hGXZ+QFCwWvutoBYx5Gt1BABqh0y6ILsO7c+IZdcox6Cu23cgGUBOajd LcgGhhJXjP3+eCWB7lklmd7h0Bm4VvUwBmrXoi6OUoclOLdBelm2JyVQKx1Z8oE/ Vb4vOuXFVvuTx7YtFMZZGJkxGxoGtbz52SyM5DQqE8/rlIHIcyUfsABGwZhBE9kb BJRpeJpp8i9Xls8UdlUpDrcfEt274IXpjLeA07wizw5cviUvb97dKzm9uAVUyrGf +gTCYZUIbpuxD8lZFH5g =P0tj -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/borntraeger/tags/s390x-20160927' into staging Couple of s390x patches: - some PCI cleanups - fix build error due to uuid rework - fix potential deadlock in sigp handling - enable ccw devices in BIOS and enforce checking in QEMU # gpg: Signature made Wed 28 Sep 2016 12:27:03 BST # gpg: using RSA key 0x117BBC80B5A61C7C # gpg: Good signature from "Christian Borntraeger (IBM) <borntraeger@de.ibm.com>" # Primary key fingerprint: F922 9381 A334 08F9 DBAB FBCA 117B BC80 B5A6 1C7C * remotes/borntraeger/tags/s390x-20160927: s390x/kvm: fix build against qemu_uuid s390x/css: {c,h,t,r,x}sch: require enable AND device number valid pc-bios/s390-ccw.img: rebuild image pc-bios/s390-ccw: enable subchannel for IPL I/O devices s390x/kvm: Fix potential deadlock in sigp handling s390x/pci: code cleanup s390x/pci: assign msix io region for each pci device s390x/pci: re-arrange variable declarations Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
c5d128ffeb
@ -775,7 +775,7 @@ int css_do_xsch(SubchDev *sch)
|
|||||||
PMCW *p = &sch->curr_status.pmcw;
|
PMCW *p = &sch->curr_status.pmcw;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!(p->flags & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA))) {
|
if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -815,7 +815,7 @@ int css_do_csch(SubchDev *sch)
|
|||||||
PMCW *p = &sch->curr_status.pmcw;
|
PMCW *p = &sch->curr_status.pmcw;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!(p->flags & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA))) {
|
if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -837,7 +837,7 @@ int css_do_hsch(SubchDev *sch)
|
|||||||
PMCW *p = &sch->curr_status.pmcw;
|
PMCW *p = &sch->curr_status.pmcw;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!(p->flags & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA))) {
|
if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -913,7 +913,7 @@ int css_do_ssch(SubchDev *sch, ORB *orb)
|
|||||||
PMCW *p = &sch->curr_status.pmcw;
|
PMCW *p = &sch->curr_status.pmcw;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!(p->flags & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA))) {
|
if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -990,7 +990,7 @@ int css_do_tsch_get_irb(SubchDev *sch, IRB *target_irb, int *irb_len)
|
|||||||
uint16_t stctl;
|
uint16_t stctl;
|
||||||
IRB irb;
|
IRB irb;
|
||||||
|
|
||||||
if (!(p->flags & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA))) {
|
if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1196,7 +1196,7 @@ int css_do_rsch(SubchDev *sch)
|
|||||||
PMCW *p = &sch->curr_status.pmcw;
|
PMCW *p = &sch->curr_status.pmcw;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!(p->flags & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA))) {
|
if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -383,7 +383,6 @@ static IOMMUTLBEntry s390_translate_iommu(MemoryRegion *iommu, hwaddr addr,
|
|||||||
uint64_t pte;
|
uint64_t pte;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
S390PCIBusDevice *pbdev = container_of(iommu, S390PCIBusDevice, iommu_mr);
|
S390PCIBusDevice *pbdev = container_of(iommu, S390PCIBusDevice, iommu_mr);
|
||||||
S390pciState *s;
|
|
||||||
IOMMUTLBEntry ret = {
|
IOMMUTLBEntry ret = {
|
||||||
.target_as = &address_space_memory,
|
.target_as = &address_space_memory,
|
||||||
.iova = 0,
|
.iova = 0,
|
||||||
@ -405,19 +404,6 @@ static IOMMUTLBEntry s390_translate_iommu(MemoryRegion *iommu, hwaddr addr,
|
|||||||
|
|
||||||
DPRINTF("iommu trans addr 0x%" PRIx64 "\n", addr);
|
DPRINTF("iommu trans addr 0x%" PRIx64 "\n", addr);
|
||||||
|
|
||||||
s = S390_PCI_HOST_BRIDGE(pci_device_root_bus(pbdev->pdev)->qbus.parent);
|
|
||||||
/* s390 does not have an APIC mapped to main storage so we use
|
|
||||||
* a separate AddressSpace only for msix notifications
|
|
||||||
*/
|
|
||||||
if (addr == ZPCI_MSI_ADDR) {
|
|
||||||
ret.target_as = &s->msix_notify_as;
|
|
||||||
ret.iova = addr;
|
|
||||||
ret.translated_addr = addr;
|
|
||||||
ret.addr_mask = 0xfff;
|
|
||||||
ret.perm = IOMMU_RW;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addr < pbdev->pba || addr > pbdev->pal) {
|
if (addr < pbdev->pba || addr > pbdev->pal) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -476,7 +462,7 @@ static uint8_t set_ind_atomic(uint64_t ind_loc, uint8_t to_be_set)
|
|||||||
static void s390_msi_ctrl_write(void *opaque, hwaddr addr, uint64_t data,
|
static void s390_msi_ctrl_write(void *opaque, hwaddr addr, uint64_t data,
|
||||||
unsigned int size)
|
unsigned int size)
|
||||||
{
|
{
|
||||||
S390PCIBusDevice *pbdev;
|
S390PCIBusDevice *pbdev = opaque;
|
||||||
uint32_t io_int_word;
|
uint32_t io_int_word;
|
||||||
uint32_t idx = data >> ZPCI_MSI_VEC_BITS;
|
uint32_t idx = data >> ZPCI_MSI_VEC_BITS;
|
||||||
uint32_t vec = data & ZPCI_MSI_VEC_MASK;
|
uint32_t vec = data & ZPCI_MSI_VEC_MASK;
|
||||||
@ -486,7 +472,6 @@ static void s390_msi_ctrl_write(void *opaque, hwaddr addr, uint64_t data,
|
|||||||
|
|
||||||
DPRINTF("write_msix data 0x%" PRIx64 " idx %d vec 0x%x\n", data, idx, vec);
|
DPRINTF("write_msix data 0x%" PRIx64 " idx %d vec 0x%x\n", data, idx, vec);
|
||||||
|
|
||||||
pbdev = s390_pci_find_dev_by_idx(idx);
|
|
||||||
if (!pbdev) {
|
if (!pbdev) {
|
||||||
e |= (vec << ERR_EVENT_MVN_OFFSET);
|
e |= (vec << ERR_EVENT_MVN_OFFSET);
|
||||||
s390_pci_generate_error_event(ERR_EVENT_NOMSI, idx, 0, addr, e);
|
s390_pci_generate_error_event(ERR_EVENT_NOMSI, idx, 0, addr, e);
|
||||||
@ -548,10 +533,6 @@ static void s390_pcihost_init_as(S390pciState *s)
|
|||||||
|
|
||||||
s->iommu[i] = iommu;
|
s->iommu[i] = iommu;
|
||||||
}
|
}
|
||||||
|
|
||||||
memory_region_init_io(&s->msix_notify_mr, OBJECT(s),
|
|
||||||
&s390_msi_ctrl_ops, s, "msix-s390", UINT64_MAX);
|
|
||||||
address_space_init(&s->msix_notify_as, &s->msix_notify_mr, "msix-pci");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int s390_pcihost_init(SysBusDevice *dev)
|
static int s390_pcihost_init(SysBusDevice *dev)
|
||||||
@ -581,7 +562,7 @@ static int s390_pcihost_init(SysBusDevice *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int s390_pcihost_setup_msix(S390PCIBusDevice *pbdev)
|
static int s390_pci_setup_msix(S390PCIBusDevice *pbdev)
|
||||||
{
|
{
|
||||||
uint8_t pos;
|
uint8_t pos;
|
||||||
uint16_t ctrl;
|
uint16_t ctrl;
|
||||||
@ -609,6 +590,26 @@ static int s390_pcihost_setup_msix(S390PCIBusDevice *pbdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void s390_pci_msix_init(S390PCIBusDevice *pbdev)
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = g_strdup_printf("msix-s390-%04x", pbdev->uid);
|
||||||
|
|
||||||
|
memory_region_init_io(&pbdev->msix_notify_mr, OBJECT(pbdev),
|
||||||
|
&s390_msi_ctrl_ops, pbdev, name, PAGE_SIZE);
|
||||||
|
memory_region_add_subregion(&pbdev->iommu->mr, ZPCI_MSI_ADDR,
|
||||||
|
&pbdev->msix_notify_mr);
|
||||||
|
|
||||||
|
g_free(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void s390_pci_msix_free(S390PCIBusDevice *pbdev)
|
||||||
|
{
|
||||||
|
memory_region_del_subregion(&pbdev->iommu->mr, &pbdev->msix_notify_mr);
|
||||||
|
object_unparent(OBJECT(&pbdev->msix_notify_mr));
|
||||||
|
}
|
||||||
|
|
||||||
static S390PCIBusDevice *s390_pci_device_new(const char *target)
|
static S390PCIBusDevice *s390_pci_device_new(const char *target)
|
||||||
{
|
{
|
||||||
DeviceState *dev = NULL;
|
DeviceState *dev = NULL;
|
||||||
@ -662,7 +663,9 @@ static void s390_pcihost_hot_plug(HotplugHandler *hotplug_dev,
|
|||||||
pbdev->pdev = pdev;
|
pbdev->pdev = pdev;
|
||||||
pbdev->iommu = s->iommu[PCI_SLOT(pdev->devfn)];
|
pbdev->iommu = s->iommu[PCI_SLOT(pdev->devfn)];
|
||||||
pbdev->state = ZPCI_FS_STANDBY;
|
pbdev->state = ZPCI_FS_STANDBY;
|
||||||
s390_pcihost_setup_msix(pbdev);
|
|
||||||
|
s390_pci_msix_init(pbdev);
|
||||||
|
s390_pci_setup_msix(pbdev);
|
||||||
|
|
||||||
if (dev->hotplugged) {
|
if (dev->hotplugged) {
|
||||||
s390_pci_generate_plug_event(HP_EVENT_RESERVED_TO_STANDBY,
|
s390_pci_generate_plug_event(HP_EVENT_RESERVED_TO_STANDBY,
|
||||||
@ -749,6 +752,7 @@ static void s390_pcihost_hot_unplug(HotplugHandler *hotplug_dev,
|
|||||||
s390_pci_generate_plug_event(HP_EVENT_STANDBY_TO_RESERVED,
|
s390_pci_generate_plug_event(HP_EVENT_STANDBY_TO_RESERVED,
|
||||||
pbdev->fh, pbdev->fid);
|
pbdev->fh, pbdev->fid);
|
||||||
object_unparent(OBJECT(pci_dev));
|
object_unparent(OBJECT(pci_dev));
|
||||||
|
s390_pci_msix_free(pbdev);
|
||||||
pbdev->pdev = NULL;
|
pbdev->pdev = NULL;
|
||||||
pbdev->state = ZPCI_FS_RESERVED;
|
pbdev->state = ZPCI_FS_RESERVED;
|
||||||
out:
|
out:
|
||||||
|
@ -82,6 +82,7 @@
|
|||||||
#define ZPCI_EDMA_ADDR 0x1ffffffffffffffULL
|
#define ZPCI_EDMA_ADDR 0x1ffffffffffffffULL
|
||||||
|
|
||||||
#define PAGE_SHIFT 12
|
#define PAGE_SHIFT 12
|
||||||
|
#define PAGE_SIZE (1 << PAGE_SHIFT)
|
||||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||||
#define PAGE_DEFAULT_ACC 0
|
#define PAGE_DEFAULT_ACC 0
|
||||||
#define PAGE_DEFAULT_KEY (PAGE_DEFAULT_ACC << 4)
|
#define PAGE_DEFAULT_KEY (PAGE_DEFAULT_ACC << 4)
|
||||||
@ -283,6 +284,7 @@ typedef struct S390PCIBusDevice {
|
|||||||
AdapterRoutes routes;
|
AdapterRoutes routes;
|
||||||
S390PCIIOMMU *iommu;
|
S390PCIIOMMU *iommu;
|
||||||
MemoryRegion iommu_mr;
|
MemoryRegion iommu_mr;
|
||||||
|
MemoryRegion msix_notify_mr;
|
||||||
IndAddr *summary_ind;
|
IndAddr *summary_ind;
|
||||||
IndAddr *indicator;
|
IndAddr *indicator;
|
||||||
QEMUTimer *release_timer;
|
QEMUTimer *release_timer;
|
||||||
@ -297,8 +299,6 @@ typedef struct S390pciState {
|
|||||||
S390PCIBus *bus;
|
S390PCIBus *bus;
|
||||||
S390PCIBusDevice *pbdev[PCI_SLOT_MAX];
|
S390PCIBusDevice *pbdev[PCI_SLOT_MAX];
|
||||||
S390PCIIOMMU *iommu[PCI_SLOT_MAX];
|
S390PCIIOMMU *iommu[PCI_SLOT_MAX];
|
||||||
AddressSpace msix_notify_as;
|
|
||||||
MemoryRegion msix_notify_mr;
|
|
||||||
QTAILQ_HEAD(, SeiContainer) pending_sei;
|
QTAILQ_HEAD(, SeiContainer) pending_sei;
|
||||||
} S390pciState;
|
} S390pciState;
|
||||||
|
|
||||||
|
@ -315,6 +315,7 @@ int pcilg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2)
|
|||||||
S390PCIBusDevice *pbdev;
|
S390PCIBusDevice *pbdev;
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
uint64_t data;
|
uint64_t data;
|
||||||
|
MemoryRegion *mr;
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
uint32_t fh;
|
uint32_t fh;
|
||||||
uint8_t pcias;
|
uint8_t pcias;
|
||||||
@ -363,7 +364,7 @@ int pcilg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2)
|
|||||||
program_interrupt(env, PGM_OPERAND, 4);
|
program_interrupt(env, PGM_OPERAND, 4);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
MemoryRegion *mr = pbdev->pdev->io_regions[pcias].memory;
|
mr = pbdev->pdev->io_regions[pcias].memory;
|
||||||
memory_region_dispatch_read(mr, offset, &data, len,
|
memory_region_dispatch_read(mr, offset, &data, len,
|
||||||
MEMTXATTRS_UNSPECIFIED);
|
MEMTXATTRS_UNSPECIFIED);
|
||||||
} else if (pcias == 15) {
|
} else if (pcias == 15) {
|
||||||
@ -442,6 +443,7 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2)
|
|||||||
CPUS390XState *env = &cpu->env;
|
CPUS390XState *env = &cpu->env;
|
||||||
uint64_t offset, data;
|
uint64_t offset, data;
|
||||||
S390PCIBusDevice *pbdev;
|
S390PCIBusDevice *pbdev;
|
||||||
|
MemoryRegion *mr;
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
uint32_t fh;
|
uint32_t fh;
|
||||||
uint8_t pcias;
|
uint8_t pcias;
|
||||||
@ -491,7 +493,7 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2)
|
|||||||
program_interrupt(env, PGM_OPERAND, 4);
|
program_interrupt(env, PGM_OPERAND, 4);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
MemoryRegion *mr;
|
|
||||||
if (trap_msix(pbdev, offset, pcias)) {
|
if (trap_msix(pbdev, offset, pcias)) {
|
||||||
offset = offset - pbdev->msix.table_offset;
|
offset = offset - pbdev->msix.table_offset;
|
||||||
mr = &pbdev->pdev->msix_table_mmio;
|
mr = &pbdev->pdev->msix_table_mmio;
|
||||||
|
Binary file not shown.
@ -97,7 +97,8 @@ static int run_ccw(VDev *vdev, int cmd, void *ptr, int len)
|
|||||||
|
|
||||||
/* start command processing */
|
/* start command processing */
|
||||||
stsch_err(vdev->schid, &schib);
|
stsch_err(vdev->schid, &schib);
|
||||||
schib.scsw.ctrl = SCSW_FCTL_START_FUNC;
|
/* enable the subchannel for IPL device */
|
||||||
|
schib.pmcw.ena = 1;
|
||||||
msch(vdev->schid, &schib);
|
msch(vdev->schid, &schib);
|
||||||
|
|
||||||
/* start subchannel command */
|
/* start subchannel command */
|
||||||
|
@ -132,6 +132,8 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
|
|||||||
KVM_CAP_LAST_INFO
|
KVM_CAP_LAST_INFO
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static QemuMutex qemu_sigp_mutex;
|
||||||
|
|
||||||
static int cap_sync_regs;
|
static int cap_sync_regs;
|
||||||
static int cap_async_pf;
|
static int cap_async_pf;
|
||||||
static int cap_mem_op;
|
static int cap_mem_op;
|
||||||
@ -287,6 +289,8 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qemu_mutex_init(&qemu_sigp_mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1776,6 +1780,11 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
|
|||||||
status_reg = &env->regs[r1];
|
status_reg = &env->regs[r1];
|
||||||
param = (r1 % 2) ? env->regs[r1] : env->regs[r1 + 1];
|
param = (r1 % 2) ? env->regs[r1] : env->regs[r1 + 1];
|
||||||
|
|
||||||
|
if (qemu_mutex_trylock(&qemu_sigp_mutex)) {
|
||||||
|
ret = SIGP_CC_BUSY;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
switch (order) {
|
switch (order) {
|
||||||
case SIGP_SET_ARCH:
|
case SIGP_SET_ARCH:
|
||||||
ret = sigp_set_architecture(cpu, param, status_reg);
|
ret = sigp_set_architecture(cpu, param, status_reg);
|
||||||
@ -1785,7 +1794,9 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
|
|||||||
dst_cpu = s390_cpu_addr2state(env->regs[r3]);
|
dst_cpu = s390_cpu_addr2state(env->regs[r3]);
|
||||||
ret = handle_sigp_single_dst(dst_cpu, order, param, status_reg);
|
ret = handle_sigp_single_dst(dst_cpu, order, param, status_reg);
|
||||||
}
|
}
|
||||||
|
qemu_mutex_unlock(&qemu_sigp_mutex);
|
||||||
|
|
||||||
|
out:
|
||||||
trace_kvm_sigp_finished(order, CPU(cpu)->cpu_index,
|
trace_kvm_sigp_finished(order, CPU(cpu)->cpu_index,
|
||||||
dst_cpu ? CPU(dst_cpu)->cpu_index : -1, ret);
|
dst_cpu ? CPU(dst_cpu)->cpu_index : -1, ret);
|
||||||
|
|
||||||
@ -1990,7 +2001,7 @@ static void insert_stsi_3_2_2(S390CPU *cpu, __u64 addr, uint8_t ar)
|
|||||||
strcpy((char *)sysib.ext_names[0], "KVMguest");
|
strcpy((char *)sysib.ext_names[0], "KVMguest");
|
||||||
}
|
}
|
||||||
/* Insert UUID */
|
/* Insert UUID */
|
||||||
memcpy(sysib.vm[0].uuid, qemu_uuid, sizeof(sysib.vm[0].uuid));
|
memcpy(sysib.vm[0].uuid, &qemu_uuid, sizeof(sysib.vm[0].uuid));
|
||||||
|
|
||||||
s390_cpu_virt_mem_write(cpu, addr, ar, &sysib, sizeof(sysib));
|
s390_cpu_virt_mem_write(cpu, addr, ar, &sysib, sizeof(sysib));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user