Merge branch 's390-for-upstream' of git://repo.or.cz/qemu/agraf
* 's390-for-upstream' of git://repo.or.cz/qemu/agraf: s390: stop target cpu on sigp initial reset s390: make kvm_stat work on s390 kvm: Update kernel headers s390x: fix s390 virtio aliases
This commit is contained in:
commit
8dacfcb407
@ -20,6 +20,7 @@
|
||||
#include "qdev.h"
|
||||
#include "monitor.h"
|
||||
#include "qmp-commands.h"
|
||||
#include "arch_init.h"
|
||||
|
||||
/*
|
||||
* Aliases were a bad idea from the start. Let's keep them
|
||||
@ -29,16 +30,18 @@ typedef struct QDevAlias
|
||||
{
|
||||
const char *typename;
|
||||
const char *alias;
|
||||
uint32_t arch_mask;
|
||||
} QDevAlias;
|
||||
|
||||
static const QDevAlias qdev_alias_table[] = {
|
||||
{ "virtio-blk-pci", "virtio-blk" },
|
||||
{ "virtio-net-pci", "virtio-net" },
|
||||
{ "virtio-serial-pci", "virtio-serial" },
|
||||
{ "virtio-balloon-pci", "virtio-balloon" },
|
||||
{ "virtio-blk-s390", "virtio-blk" },
|
||||
{ "virtio-net-s390", "virtio-net" },
|
||||
{ "virtio-serial-s390", "virtio-serial" },
|
||||
{ "virtio-blk-pci", "virtio-blk", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X },
|
||||
{ "virtio-net-pci", "virtio-net", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X },
|
||||
{ "virtio-serial-pci", "virtio-serial", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X },
|
||||
{ "virtio-balloon-pci", "virtio-balloon",
|
||||
QEMU_ARCH_ALL & ~QEMU_ARCH_S390X },
|
||||
{ "virtio-blk-s390", "virtio-blk", QEMU_ARCH_S390X },
|
||||
{ "virtio-net-s390", "virtio-net", QEMU_ARCH_S390X },
|
||||
{ "virtio-serial-s390", "virtio-serial", QEMU_ARCH_S390X },
|
||||
{ "lsi53c895a", "lsi" },
|
||||
{ "ich9-ahci", "ahci" },
|
||||
{ }
|
||||
@ -50,6 +53,11 @@ static const char *qdev_class_get_alias(DeviceClass *dc)
|
||||
int i;
|
||||
|
||||
for (i = 0; qdev_alias_table[i].typename; i++) {
|
||||
if (qdev_alias_table[i].arch_mask &&
|
||||
!(qdev_alias_table[i].arch_mask & arch_type)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcmp(qdev_alias_table[i].typename, typename) == 0) {
|
||||
return qdev_alias_table[i].alias;
|
||||
}
|
||||
@ -110,6 +118,11 @@ static const char *find_typename_by_alias(const char *alias)
|
||||
int i;
|
||||
|
||||
for (i = 0; qdev_alias_table[i].alias; i++) {
|
||||
if (qdev_alias_table[i].arch_mask &&
|
||||
!(qdev_alias_table[i].arch_mask & arch_type)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcmp(qdev_alias_table[i].alias, alias) == 0) {
|
||||
return qdev_alias_table[i].typename;
|
||||
}
|
||||
|
@ -52,4 +52,9 @@ struct kvm_sync_regs {
|
||||
__u32 acrs[16]; /* access registers */
|
||||
__u64 crs[16]; /* control registers */
|
||||
};
|
||||
|
||||
#define KVM_REG_S390_TODPR (KVM_REG_S390 | KVM_REG_SIZE_U32 | 0x1)
|
||||
#define KVM_REG_S390_EPOCHDIFF (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x2)
|
||||
#define KVM_REG_S390_CPU_TIMER (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x3)
|
||||
#define KVM_REG_S390_CLOCK_COMP (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x4)
|
||||
#endif
|
||||
|
@ -616,6 +616,7 @@ struct kvm_ppc_smmu_info {
|
||||
#define KVM_CAP_KVMCLOCK_CTRL 76
|
||||
#define KVM_CAP_SIGNAL_MSI 77
|
||||
#define KVM_CAP_PPC_GET_SMMU_INFO 78
|
||||
#define KVM_CAP_S390_COW 79
|
||||
|
||||
#ifdef KVM_CAP_IRQ_ROUTING
|
||||
|
||||
|
@ -141,15 +141,39 @@ svm_exit_reasons = {
|
||||
0x400: 'NPF',
|
||||
}
|
||||
|
||||
s390_exit_reasons = {
|
||||
0x000: 'UNKNOWN',
|
||||
0x001: 'EXCEPTION',
|
||||
0x002: 'IO',
|
||||
0x003: 'HYPERCALL',
|
||||
0x004: 'DEBUG',
|
||||
0x005: 'HLT',
|
||||
0x006: 'MMIO',
|
||||
0x007: 'IRQ_WINDOW_OPEN',
|
||||
0x008: 'SHUTDOWN',
|
||||
0x009: 'FAIL_ENTRY',
|
||||
0x010: 'INTR',
|
||||
0x011: 'SET_TPR',
|
||||
0x012: 'TPR_ACCESS',
|
||||
0x013: 'S390_SIEIC',
|
||||
0x014: 'S390_RESET',
|
||||
0x015: 'DCR',
|
||||
0x016: 'NMI',
|
||||
0x017: 'INTERNAL_ERROR',
|
||||
0x018: 'OSI',
|
||||
0x019: 'PAPR_HCALL',
|
||||
}
|
||||
|
||||
vendor_exit_reasons = {
|
||||
'vmx': vmx_exit_reasons,
|
||||
'svm': svm_exit_reasons,
|
||||
'IBM/S390': s390_exit_reasons,
|
||||
}
|
||||
|
||||
exit_reasons = None
|
||||
|
||||
for line in file('/proc/cpuinfo').readlines():
|
||||
if line.startswith('flags'):
|
||||
if line.startswith('flags') or line.startswith('vendor_id'):
|
||||
for flag in line.split():
|
||||
if flag in vendor_exit_reasons:
|
||||
exit_reasons = vendor_exit_reasons[flag]
|
||||
|
@ -314,6 +314,7 @@ static int s390_cpu_initial_reset(CPUS390XState *env)
|
||||
{
|
||||
int i;
|
||||
|
||||
s390_del_running_cpu(env);
|
||||
if (kvm_vcpu_ioctl(env, KVM_S390_INITIAL_RESET, NULL) < 0) {
|
||||
perror("cannot init reset vcpu");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user