mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge QEMU v9.2.1
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
||||
9.2.0
|
||||
9.2.1
|
||||
|
||||
@@ -437,6 +437,16 @@ int kvm_unpark_vcpu(KVMState *s, unsigned long vcpu_id)
|
||||
return kvm_fd;
|
||||
}
|
||||
|
||||
static void kvm_reset_parked_vcpus(void *param)
|
||||
{
|
||||
KVMState *s = param;
|
||||
struct KVMParkedVcpu *cpu;
|
||||
|
||||
QLIST_FOREACH(cpu, &s->kvm_parked_vcpus, node) {
|
||||
kvm_arch_reset_parked_vcpu(cpu->vcpu_id, cpu->kvm_fd);
|
||||
}
|
||||
}
|
||||
|
||||
int kvm_create_vcpu(CPUState *cpu)
|
||||
{
|
||||
unsigned long vcpu_id = kvm_arch_vcpu_id(cpu);
|
||||
@@ -2728,6 +2738,7 @@ static int kvm_init(MachineState *ms)
|
||||
}
|
||||
|
||||
qemu_register_reset(kvm_unpoison_all, NULL);
|
||||
qemu_register_reset(kvm_reset_parked_vcpus, s);
|
||||
|
||||
if (s->kernel_irqchip_allowed) {
|
||||
kvm_irqchip_create(s);
|
||||
|
||||
@@ -281,8 +281,7 @@ static int cryptodev_vhost_user_create_session(
|
||||
break;
|
||||
|
||||
default:
|
||||
error_setg(&local_error, "Unsupported opcode :%" PRIu32 "",
|
||||
sess_info->op_code);
|
||||
error_report("Unsupported opcode :%" PRIu32 "", sess_info->op_code);
|
||||
return -VIRTIO_CRYPTO_NOTSUPP;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
TARGET_ARCH=i386
|
||||
TARGET_SUPPORTS_MTTCG=y
|
||||
TARGET_KVM_HAVE_GUEST_DEBUG=y
|
||||
TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
|
||||
TARGET_XML_FILES= gdb-xml/i386-32bit.xml
|
||||
|
||||
@@ -2,4 +2,5 @@ TARGET_ARCH=x86_64
|
||||
TARGET_BASE_ARCH=i386
|
||||
TARGET_SUPPORTS_MTTCG=y
|
||||
TARGET_KVM_HAVE_GUEST_DEBUG=y
|
||||
TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
|
||||
TARGET_XML_FILES= gdb-xml/i386-64bit.xml
|
||||
|
||||
+13
-2
@@ -107,7 +107,7 @@ static void *threaded_qcrypto_pbkdf2_count_iters(void *data)
|
||||
size_t nsalt = iters_data->nsalt;
|
||||
size_t nout = iters_data->nout;
|
||||
Error **errp = iters_data->errp;
|
||||
|
||||
size_t scaled = 0;
|
||||
uint64_t ret = -1;
|
||||
g_autofree uint8_t *out = g_new(uint8_t, nout);
|
||||
uint64_t iterations = (1 << 15);
|
||||
@@ -131,7 +131,17 @@ static void *threaded_qcrypto_pbkdf2_count_iters(void *data)
|
||||
|
||||
delta_ms = end_ms - start_ms;
|
||||
|
||||
if (delta_ms == 0) { /* sanity check */
|
||||
/*
|
||||
* For very small 'iterations' values, CPU (or crypto
|
||||
* accelerator) might be fast enough that the scheduler
|
||||
* hasn't incremented getrusage() data, or incremented
|
||||
* it by a very small amount, resulting in delta_ms == 0.
|
||||
* Once we've scaled 'iterations' x10, 5 times, we really
|
||||
* should be seeing delta_ms != 0, so sanity check at
|
||||
* that point.
|
||||
*/
|
||||
if (scaled > 5 &&
|
||||
delta_ms == 0) { /* sanity check */
|
||||
error_setg(errp, "Unable to get accurate CPU usage");
|
||||
goto cleanup;
|
||||
} else if (delta_ms > 500) {
|
||||
@@ -141,6 +151,7 @@ static void *threaded_qcrypto_pbkdf2_count_iters(void *data)
|
||||
} else {
|
||||
iterations = (iterations * 1000 / delta_ms);
|
||||
}
|
||||
scaled++;
|
||||
}
|
||||
|
||||
iterations = iterations * 1000 / delta_ms;
|
||||
|
||||
@@ -75,7 +75,7 @@ marked deprecated since 9.0, users have to ensure that all the topology members
|
||||
described with -smp are supported by the target machine.
|
||||
|
||||
``-runas`` (since 9.1)
|
||||
----------------------
|
||||
''''''''''''''''''''''
|
||||
|
||||
Use ``-run-with user=..`` instead.
|
||||
|
||||
|
||||
@@ -518,7 +518,7 @@ and later do not support it because the virtio-scsi device was introduced for
|
||||
full SCSI support. Use virtio-scsi instead when SCSI passthrough is required.
|
||||
|
||||
``-fsdev proxy`` and ``-virtfs proxy`` (since 9.2)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The 9p ``proxy`` filesystem backend driver was originally developed to
|
||||
enhance security by dispatching low level filesystem operations from 9p
|
||||
@@ -1077,8 +1077,8 @@ processor IP (see `Intel discontinuance notification`_).
|
||||
TCG introspection features
|
||||
--------------------------
|
||||
|
||||
TCG trace-events (since 6.2)
|
||||
''''''''''''''''''''''''''''
|
||||
TCG trace-events (removed in 7.0)
|
||||
'''''''''''''''''''''''''''''''''
|
||||
|
||||
The ability to add new TCG trace points had bit rotted and as the
|
||||
feature can be replicated with TCG plugins it was removed. If
|
||||
|
||||
@@ -317,9 +317,9 @@ void gdb_handle_v_file_open(GArray *params, void *user_ctx)
|
||||
int fd = open(filename, flags, mode);
|
||||
#endif
|
||||
if (fd < 0) {
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%d", errno);
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%x", errno);
|
||||
} else {
|
||||
g_string_printf(gdbserver_state.str_buf, "F%d", fd);
|
||||
g_string_printf(gdbserver_state.str_buf, "F%x", fd);
|
||||
}
|
||||
gdb_put_strbuf();
|
||||
}
|
||||
@@ -329,7 +329,7 @@ void gdb_handle_v_file_close(GArray *params, void *user_ctx)
|
||||
int fd = gdb_get_cmd_param(params, 0)->val_ul;
|
||||
|
||||
if (close(fd) == -1) {
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%d", errno);
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%x", errno);
|
||||
gdb_put_strbuf();
|
||||
return;
|
||||
}
|
||||
@@ -352,7 +352,7 @@ void gdb_handle_v_file_pread(GArray *params, void *user_ctx)
|
||||
|
||||
ssize_t n = pread(fd, buf, bufsiz, offset);
|
||||
if (n < 0) {
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%d", errno);
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%x", errno);
|
||||
gdb_put_strbuf();
|
||||
return;
|
||||
}
|
||||
@@ -375,7 +375,7 @@ void gdb_handle_v_file_readlink(GArray *params, void *user_ctx)
|
||||
ssize_t n = readlink(filename, buf, BUFSIZ);
|
||||
#endif
|
||||
if (n < 0) {
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%d", errno);
|
||||
g_string_printf(gdbserver_state.str_buf, "F-1,%x", errno);
|
||||
gdb_put_strbuf();
|
||||
return;
|
||||
}
|
||||
|
||||
+17
-10
@@ -177,20 +177,27 @@ again:
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (close_if_special_file(fd) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
serrno = errno;
|
||||
/* O_NONBLOCK was only needed to open the file. Let's drop it. We don't
|
||||
* do that with O_PATH since fcntl(F_SETFL) isn't supported, and openat()
|
||||
* ignored it anyway.
|
||||
*/
|
||||
/* Only if O_PATH is not set ... */
|
||||
if (!(flags & O_PATH_9P_UTIL)) {
|
||||
/*
|
||||
* Prevent I/O on special files (device files, etc.) on host side,
|
||||
* however it is safe and required to allow opening them with O_PATH,
|
||||
* as this is limited to (required) path based operations only.
|
||||
*/
|
||||
if (close_if_special_file(fd) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
serrno = errno;
|
||||
/*
|
||||
* O_NONBLOCK was only needed to open the file. Let's drop it. We don't
|
||||
* do that with O_PATH since fcntl(F_SETFL) isn't supported, and
|
||||
* openat() ignored it anyway.
|
||||
*/
|
||||
ret = fcntl(fd, F_SETFL, flags);
|
||||
assert(!ret);
|
||||
errno = serrno;
|
||||
}
|
||||
errno = serrno;
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
||||
+23
-10
@@ -657,6 +657,7 @@ static Aml *aml_pci_pdsm(void)
|
||||
Aml *acpi_index = aml_local(2);
|
||||
Aml *zero = aml_int(0);
|
||||
Aml *one = aml_int(1);
|
||||
Aml *not_supp = aml_int(0xFFFFFFFF);
|
||||
Aml *func = aml_arg(2);
|
||||
Aml *params = aml_arg(4);
|
||||
Aml *bnum = aml_derefof(aml_index(params, aml_int(0)));
|
||||
@@ -681,7 +682,7 @@ static Aml *aml_pci_pdsm(void)
|
||||
*/
|
||||
ifctx1 = aml_if(aml_lnot(
|
||||
aml_or(aml_equal(acpi_index, zero),
|
||||
aml_equal(acpi_index, aml_int(0xFFFFFFFF)), NULL)
|
||||
aml_equal(acpi_index, not_supp), NULL)
|
||||
));
|
||||
{
|
||||
/* have supported functions */
|
||||
@@ -707,18 +708,30 @@ static Aml *aml_pci_pdsm(void)
|
||||
{
|
||||
Aml *pkg = aml_package(2);
|
||||
|
||||
aml_append(pkg, zero);
|
||||
/*
|
||||
* optional, if not impl. should return null string
|
||||
*/
|
||||
aml_append(pkg, aml_string("%s", ""));
|
||||
aml_append(ifctx, aml_store(pkg, ret));
|
||||
|
||||
aml_append(ifctx, aml_store(aml_call2("AIDX", bnum, sunum), acpi_index));
|
||||
aml_append(ifctx, aml_store(pkg, ret));
|
||||
/*
|
||||
* update acpi-index to actual value
|
||||
* Windows calls func=7 without checking if it's available,
|
||||
* as workaround Microsoft has suggested to return invalid for func7
|
||||
* Package, so return 2 elements package but only initialize elements
|
||||
* when acpi_index is supported and leave them uninitialized, which
|
||||
* leads elements to being Uninitialized ObjectType and should trip
|
||||
* Windows into discarding result as an unexpected and prevent setting
|
||||
* bogus 'PCI Label' on the device.
|
||||
*/
|
||||
aml_append(ifctx, aml_store(acpi_index, aml_index(ret, zero)));
|
||||
ifctx1 = aml_if(aml_lnot(aml_lor(
|
||||
aml_equal(acpi_index, zero), aml_equal(acpi_index, not_supp)
|
||||
)));
|
||||
{
|
||||
aml_append(ifctx1, aml_store(acpi_index, aml_index(ret, zero)));
|
||||
/*
|
||||
* optional, if not impl. should return null string
|
||||
*/
|
||||
aml_append(ifctx1, aml_store(aml_string("%s", ""),
|
||||
aml_index(ret, one)));
|
||||
}
|
||||
aml_append(ifctx, ifctx1);
|
||||
|
||||
aml_append(ifctx, aml_return(ret));
|
||||
}
|
||||
|
||||
|
||||
@@ -945,7 +945,7 @@ void x86_load_linux(X86MachineState *x86ms,
|
||||
* kernel on the other side of the fw_cfg interface matches the hash of the
|
||||
* file the user passed in.
|
||||
*/
|
||||
if (!sev_enabled()) {
|
||||
if (!sev_enabled() && protocol > 0) {
|
||||
memcpy(setup, header, MIN(sizeof(header), setup_size));
|
||||
}
|
||||
|
||||
|
||||
+22
-22
@@ -465,7 +465,7 @@ static ItsCmdResult lookup_vte(GICv3ITSState *s, const char *who,
|
||||
static ItsCmdResult process_its_cmd_phys(GICv3ITSState *s, const ITEntry *ite,
|
||||
int irqlevel)
|
||||
{
|
||||
CTEntry cte;
|
||||
CTEntry cte = {};
|
||||
ItsCmdResult cmdres;
|
||||
|
||||
cmdres = lookup_cte(s, __func__, ite->icid, &cte);
|
||||
@@ -479,7 +479,7 @@ static ItsCmdResult process_its_cmd_phys(GICv3ITSState *s, const ITEntry *ite,
|
||||
static ItsCmdResult process_its_cmd_virt(GICv3ITSState *s, const ITEntry *ite,
|
||||
int irqlevel)
|
||||
{
|
||||
VTEntry vte;
|
||||
VTEntry vte = {};
|
||||
ItsCmdResult cmdres;
|
||||
|
||||
cmdres = lookup_vte(s, __func__, ite->vpeid, &vte);
|
||||
@@ -514,8 +514,8 @@ static ItsCmdResult process_its_cmd_virt(GICv3ITSState *s, const ITEntry *ite,
|
||||
static ItsCmdResult do_process_its_cmd(GICv3ITSState *s, uint32_t devid,
|
||||
uint32_t eventid, ItsCmdType cmd)
|
||||
{
|
||||
DTEntry dte;
|
||||
ITEntry ite;
|
||||
DTEntry dte = {};
|
||||
ITEntry ite = {};
|
||||
ItsCmdResult cmdres;
|
||||
int irqlevel;
|
||||
|
||||
@@ -583,8 +583,8 @@ static ItsCmdResult process_mapti(GICv3ITSState *s, const uint64_t *cmdpkt,
|
||||
uint32_t pIntid = 0;
|
||||
uint64_t num_eventids;
|
||||
uint16_t icid = 0;
|
||||
DTEntry dte;
|
||||
ITEntry ite;
|
||||
DTEntry dte = {};
|
||||
ITEntry ite = {};
|
||||
|
||||
devid = (cmdpkt[0] & DEVID_MASK) >> DEVID_SHIFT;
|
||||
eventid = cmdpkt[1] & EVENTID_MASK;
|
||||
@@ -651,8 +651,8 @@ static ItsCmdResult process_vmapti(GICv3ITSState *s, const uint64_t *cmdpkt,
|
||||
{
|
||||
uint32_t devid, eventid, vintid, doorbell, vpeid;
|
||||
uint32_t num_eventids;
|
||||
DTEntry dte;
|
||||
ITEntry ite;
|
||||
DTEntry dte = {};
|
||||
ITEntry ite = {};
|
||||
|
||||
if (!its_feature_virtual(s)) {
|
||||
return CMD_CONTINUE;
|
||||
@@ -761,7 +761,7 @@ static bool update_cte(GICv3ITSState *s, uint16_t icid, const CTEntry *cte)
|
||||
static ItsCmdResult process_mapc(GICv3ITSState *s, const uint64_t *cmdpkt)
|
||||
{
|
||||
uint16_t icid;
|
||||
CTEntry cte;
|
||||
CTEntry cte = {};
|
||||
|
||||
icid = cmdpkt[2] & ICID_MASK;
|
||||
cte.valid = cmdpkt[2] & CMD_FIELD_VALID_MASK;
|
||||
@@ -822,7 +822,7 @@ static bool update_dte(GICv3ITSState *s, uint32_t devid, const DTEntry *dte)
|
||||
static ItsCmdResult process_mapd(GICv3ITSState *s, const uint64_t *cmdpkt)
|
||||
{
|
||||
uint32_t devid;
|
||||
DTEntry dte;
|
||||
DTEntry dte = {};
|
||||
|
||||
devid = (cmdpkt[0] & DEVID_MASK) >> DEVID_SHIFT;
|
||||
dte.size = cmdpkt[1] & SIZE_MASK;
|
||||
@@ -886,9 +886,9 @@ static ItsCmdResult process_movi(GICv3ITSState *s, const uint64_t *cmdpkt)
|
||||
{
|
||||
uint32_t devid, eventid;
|
||||
uint16_t new_icid;
|
||||
DTEntry dte;
|
||||
CTEntry old_cte, new_cte;
|
||||
ITEntry old_ite;
|
||||
DTEntry dte = {};
|
||||
CTEntry old_cte = {}, new_cte = {};
|
||||
ITEntry old_ite = {};
|
||||
ItsCmdResult cmdres;
|
||||
|
||||
devid = FIELD_EX64(cmdpkt[0], MOVI_0, DEVICEID);
|
||||
@@ -965,7 +965,7 @@ static bool update_vte(GICv3ITSState *s, uint32_t vpeid, const VTEntry *vte)
|
||||
|
||||
static ItsCmdResult process_vmapp(GICv3ITSState *s, const uint64_t *cmdpkt)
|
||||
{
|
||||
VTEntry vte;
|
||||
VTEntry vte = {};
|
||||
uint32_t vpeid;
|
||||
|
||||
if (!its_feature_virtual(s)) {
|
||||
@@ -1030,7 +1030,7 @@ static void vmovp_callback(gpointer data, gpointer opaque)
|
||||
*/
|
||||
GICv3ITSState *s = data;
|
||||
VmovpCallbackData *cbdata = opaque;
|
||||
VTEntry vte;
|
||||
VTEntry vte = {};
|
||||
ItsCmdResult cmdres;
|
||||
|
||||
cmdres = lookup_vte(s, __func__, cbdata->vpeid, &vte);
|
||||
@@ -1085,9 +1085,9 @@ static ItsCmdResult process_vmovi(GICv3ITSState *s, const uint64_t *cmdpkt)
|
||||
{
|
||||
uint32_t devid, eventid, vpeid, doorbell;
|
||||
bool doorbell_valid;
|
||||
DTEntry dte;
|
||||
ITEntry ite;
|
||||
VTEntry old_vte, new_vte;
|
||||
DTEntry dte = {};
|
||||
ITEntry ite = {};
|
||||
VTEntry old_vte = {}, new_vte = {};
|
||||
ItsCmdResult cmdres;
|
||||
|
||||
if (!its_feature_virtual(s)) {
|
||||
@@ -1186,10 +1186,10 @@ static ItsCmdResult process_vinvall(GICv3ITSState *s, const uint64_t *cmdpkt)
|
||||
static ItsCmdResult process_inv(GICv3ITSState *s, const uint64_t *cmdpkt)
|
||||
{
|
||||
uint32_t devid, eventid;
|
||||
ITEntry ite;
|
||||
DTEntry dte;
|
||||
CTEntry cte;
|
||||
VTEntry vte;
|
||||
ITEntry ite = {};
|
||||
DTEntry dte = {};
|
||||
CTEntry cte = {};
|
||||
VTEntry vte = {};
|
||||
ItsCmdResult cmdres;
|
||||
|
||||
devid = FIELD_EX64(cmdpkt[0], INV_0, DEVICEID);
|
||||
|
||||
@@ -248,9 +248,12 @@ static void riscv_aplic_set_pending(RISCVAPLICState *aplic,
|
||||
|
||||
if ((sm == APLIC_SOURCECFG_SM_LEVEL_HIGH) ||
|
||||
(sm == APLIC_SOURCECFG_SM_LEVEL_LOW)) {
|
||||
if (!aplic->msimode || (aplic->msimode && !pending)) {
|
||||
if (!aplic->msimode) {
|
||||
return;
|
||||
}
|
||||
if (aplic->msimode && !pending) {
|
||||
goto noskip_write_pending;
|
||||
}
|
||||
if ((aplic->state[irq] & APLIC_ISTATE_INPUT) &&
|
||||
(sm == APLIC_SOURCECFG_SM_LEVEL_LOW)) {
|
||||
return;
|
||||
@@ -261,6 +264,7 @@ static void riscv_aplic_set_pending(RISCVAPLICState *aplic,
|
||||
}
|
||||
}
|
||||
|
||||
noskip_write_pending:
|
||||
riscv_aplic_set_pending_raw(aplic, irq, pending);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -843,7 +843,7 @@ static void ct3_realize(PCIDevice *pci_dev, Error **errp)
|
||||
ComponentRegisters *regs = &cxl_cstate->crb;
|
||||
MemoryRegion *mr = ®s->component_registers;
|
||||
uint8_t *pci_conf = pci_dev->config;
|
||||
unsigned short msix_num = 6;
|
||||
unsigned short msix_num = 10;
|
||||
int i, rc;
|
||||
uint16_t count;
|
||||
|
||||
|
||||
+1
-1
@@ -250,7 +250,7 @@ static uint64_t msix_pba_mmio_read(void *opaque, hwaddr addr,
|
||||
PCIDevice *dev = opaque;
|
||||
if (dev->msix_vector_poll_notifier) {
|
||||
unsigned vector_start = addr * 8;
|
||||
unsigned vector_end = MIN(addr + size * 8, dev->msix_entries_nr);
|
||||
unsigned vector_end = MIN((addr + size) * 8, dev->msix_entries_nr);
|
||||
dev->msix_vector_poll_notifier(dev, vector_start, vector_end);
|
||||
}
|
||||
|
||||
|
||||
+8
-4
@@ -1113,18 +1113,22 @@ void pcie_sync_bridge_lnk(PCIDevice *bridge_dev)
|
||||
if ((lnksta & PCI_EXP_LNKSTA_NLW) > (lnkcap & PCI_EXP_LNKCAP_MLW)) {
|
||||
lnksta &= ~PCI_EXP_LNKSTA_NLW;
|
||||
lnksta |= lnkcap & PCI_EXP_LNKCAP_MLW;
|
||||
} else if (!(lnksta & PCI_EXP_LNKSTA_NLW)) {
|
||||
lnksta |= QEMU_PCI_EXP_LNKSTA_NLW(QEMU_PCI_EXP_LNK_X1);
|
||||
}
|
||||
|
||||
if ((lnksta & PCI_EXP_LNKSTA_CLS) > (lnkcap & PCI_EXP_LNKCAP_SLS)) {
|
||||
lnksta &= ~PCI_EXP_LNKSTA_CLS;
|
||||
lnksta |= lnkcap & PCI_EXP_LNKCAP_SLS;
|
||||
} else if (!(lnksta & PCI_EXP_LNKSTA_CLS)) {
|
||||
lnksta |= QEMU_PCI_EXP_LNKSTA_CLS(QEMU_PCI_EXP_LNK_2_5GT);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(lnksta & PCI_EXP_LNKSTA_NLW)) {
|
||||
lnksta |= QEMU_PCI_EXP_LNKSTA_NLW(QEMU_PCI_EXP_LNK_X1);
|
||||
}
|
||||
|
||||
if (!(lnksta & PCI_EXP_LNKSTA_CLS)) {
|
||||
lnksta |= QEMU_PCI_EXP_LNKSTA_CLS(QEMU_PCI_EXP_LNK_2_5GT);
|
||||
}
|
||||
|
||||
pci_word_test_and_clear_mask(exp_cap + PCI_EXP_LNKSTA,
|
||||
PCI_EXP_LNKSTA_CLS | PCI_EXP_LNKSTA_NLW);
|
||||
pci_word_test_and_set_mask(exp_cap + PCI_EXP_LNKSTA, lnksta &
|
||||
|
||||
@@ -180,6 +180,17 @@ static void s390_memory_init(MemoryRegion *ram)
|
||||
{
|
||||
MemoryRegion *sysmem = get_system_memory();
|
||||
|
||||
if (!QEMU_IS_ALIGNED(memory_region_size(ram), 1 * MiB)) {
|
||||
/*
|
||||
* SCLP cannot possibly expose smaller granularity right now and KVM
|
||||
* cannot handle smaller granularity. As we don't support NUMA, the
|
||||
* region size directly corresponds to machine->ram_size, and the region
|
||||
* is a single RAM memory region.
|
||||
*/
|
||||
error_report("ram size must be multiples of 1 MiB");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* allocate RAM for core */
|
||||
memory_region_add_subregion(sysmem, 0, ram);
|
||||
|
||||
@@ -1189,6 +1200,7 @@ static void ccw_machine_2_9_instance_options(MachineState *machine)
|
||||
s390_cpudef_featoff_greater(12, 1, S390_FEAT_ZPCI);
|
||||
s390_cpudef_featoff_greater(12, 1, S390_FEAT_ADAPTER_INT_SUPPRESSION);
|
||||
s390_cpudef_featoff_greater(12, 1, S390_FEAT_ADAPTER_EVENT_NOTIFICATION);
|
||||
css_migration_enabled = false;
|
||||
}
|
||||
|
||||
static void ccw_machine_2_9_class_options(MachineClass *mc)
|
||||
@@ -1201,7 +1213,6 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
|
||||
ccw_machine_2_10_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_2_9, hw_compat_2_9_len);
|
||||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
css_migration_enabled = false;
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2, 9);
|
||||
|
||||
|
||||
+1
-1
@@ -1164,7 +1164,7 @@ static QueryRespCode ufs_exec_query_attr(UfsRequest *req, int op)
|
||||
value = ufs_read_attr_value(u, idn);
|
||||
ret = UFS_QUERY_RESULT_SUCCESS;
|
||||
} else {
|
||||
value = req->req_upiu.qr.value;
|
||||
value = be32_to_cpu(req->req_upiu.qr.value);
|
||||
ret = ufs_write_attr_value(u, idn, value);
|
||||
}
|
||||
req->rsp_upiu.qr.value = cpu_to_be32(value);
|
||||
|
||||
+3
-3
@@ -197,8 +197,8 @@ static void canokey_handle_data(USBDevice *dev, USBPacket *p)
|
||||
switch (p->pid) {
|
||||
case USB_TOKEN_OUT:
|
||||
trace_canokey_handle_data_out(ep_out, p->iov.size);
|
||||
usb_packet_copy(p, key->ep_out_buffer[ep_out], p->iov.size);
|
||||
out_pos = 0;
|
||||
/* segment packet into (possibly multiple) ep_out */
|
||||
while (out_pos != p->iov.size) {
|
||||
/*
|
||||
* key->ep_out[ep_out] set by prepare_receive
|
||||
@@ -207,8 +207,8 @@ static void canokey_handle_data(USBDevice *dev, USBPacket *p)
|
||||
* to be the buffer length
|
||||
*/
|
||||
out_len = MIN(p->iov.size - out_pos, key->ep_out_size[ep_out]);
|
||||
memcpy(key->ep_out[ep_out],
|
||||
key->ep_out_buffer[ep_out] + out_pos, out_len);
|
||||
/* usb_packet_copy would update the pos offset internally */
|
||||
usb_packet_copy(p, key->ep_out[ep_out], out_len);
|
||||
out_pos += out_len;
|
||||
/* update ep_out_size to actual len */
|
||||
key->ep_out_size[ep_out] = out_len;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user