* [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1
@ 2015-11-05 10:33 Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 14/16] kvmclock: add a new function to update env->tsc Paolo Bonzini
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Paolo Bonzini @ 2015-11-05 10:33 UTC (permalink / raw)
To: qemu-devel
The following changes since commit 7bc8e0c967a4ef77657174d28af775691e18b4ce:
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2015-10-29 09:49:52 +0000)
are available in the git repository at:
git://github.com/bonzini/qemu.git tags/for-upstream
for you to fetch changes up to dd86c68e2644969350e807404ffce612f006e803:
iscsi: Translate scsi sense into error code (2015-11-05 11:28:54 +0100)
----------------------------------------------------------------
* Guest ABI fixes for PC machines (hw_version)
* Fixes for recent Perl
* John Snow's configure fixes
* file-backed RAM improvements (Igor, Pavel)
* -Werror=clobbered fixes (Stefan)
* Kill -d ioport
* Fix qemu-system-s390x
* Performance improvement for kvmclock migration
----------------------------------------------------------------
Eduardo Habkost (3):
pc: Set hw_version on all machine classes
osdep: Rename qemu_{get, set}_version() to qemu_{, set_}hw_version()
megasas: Use qemu_hw_version() instead of QEMU_VERSION
Fam Zheng (2):
scripts/text2pod.pl: Escape left brace
iscsi: Translate scsi sense into error code
Igor Mammedov (1):
file_ram_alloc: propagate error to caller instead of terminating QEMU
John Snow (2):
configure: disallow ccache during compile tests
configure: disable FORTIFY_SOURCE under clang
Liang Li (2):
kvmclock: add a new function to update env->tsc.
Revert "Introduce cpu_clean_all_dirty"
Paolo Bonzini (4):
target-i386: fix pcmpxstrx equal-ordered (strstr) mode
ioport: do not use CPU_LOG_IOPORT
qemu-log: remove -d ioport
memory: call begin, log_start and commit when registering a new listener
Pavel Fedin (1):
backends/hostmem-file: Allow to specify full pathname for backing file
Stefan Weil (1):
cpu-exec: Fix compiler warning (-Werror=clobbered)
block/iscsi.c | 59 +++++++++++++++++++++++++++++++++++++++++++++-----
configure | 21 +++++++++++++++++-
cpu-exec.c | 18 ++++++++++++---
cpus.c | 9 --------
exec.c | 40 +++++++++++++++++++---------------
hw/arm/nseries.c | 2 +-
hw/i386/kvm/clock.c | 18 ++-------------
hw/i386/pc_piix.c | 13 +++++++++++
hw/i386/pc_q35.c | 10 +++++++++
hw/ide/core.c | 2 +-
hw/scsi/megasas.c | 2 +-
hw/scsi/scsi-bus.c | 2 +-
hw/scsi/scsi-disk.c | 2 +-
include/qemu/log.h | 1 -
include/qemu/osdep.h | 4 ++--
include/sysemu/cpus.h | 1 -
include/sysemu/kvm.h | 8 -------
ioport.c | 26 +++++-----------------
kvm-all.c | 5 -----
memory.c | 9 ++++++++
qemu-doc.texi | 2 +-
qemu-log.c | 2 --
scripts/texi2pod.pl | 2 +-
target-i386/cpu.c | 2 +-
target-i386/kvm.c | 45 ++++++++++++++++++++++++++++++++++++++
target-i386/kvm_i386.h | 1 +
target-i386/ops_sse.h | 4 ++--
trace-events | 4 ++--
util/osdep.c | 10 ++++-----
vl.c | 2 +-
30 files changed, 216 insertions(+), 110 deletions(-)
--
2.5.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [Qemu-devel] [PULL 14/16] kvmclock: add a new function to update env->tsc.
2015-11-05 10:33 [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Paolo Bonzini
@ 2015-11-05 10:33 ` Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 15/16] Revert "Introduce cpu_clean_all_dirty" Paolo Bonzini
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2015-11-05 10:33 UTC (permalink / raw)
To: qemu-devel; +Cc: Liang Li
From: Liang Li <liang.z.li@intel.com>
The commit 317b0a6d8 fixed an issue which caused by the outdated
env->tsc value, but the fix lead to 'cpu_synchronize_all_states()'
called twice during live migration. The 'cpu_synchronize_all_states()'
takes about 130us for a VM which has 4 vcpus, it's a bit expensive.
Synchronize the whole CPU context just for updating env->tsc is too
wasting, this patch use a new function to update the env->tsc.
Comparing to 'cpu_synchronize_all_states()', it only takes about 20us.
Signed-off-by: Liang Li <liang.z.li@intel.com>
Message-Id: <1446695464-27116-2-git-send-email-liang.z.li@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/i386/kvm/clock.c | 18 ++----------------
target-i386/kvm.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
target-i386/kvm_i386.h | 1 +
3 files changed, 48 insertions(+), 16 deletions(-)
diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
index efdf165..0593a3f 100644
--- a/hw/i386/kvm/clock.c
+++ b/hw/i386/kvm/clock.c
@@ -17,7 +17,7 @@
#include "qemu/host-utils.h"
#include "sysemu/sysemu.h"
#include "sysemu/kvm.h"
-#include "sysemu/cpus.h"
+#include "kvm_i386.h"
#include "hw/sysbus.h"
#include "hw/kvm/clock.h"
@@ -125,21 +125,7 @@ static void kvmclock_vm_state_change(void *opaque, int running,
return;
}
- cpu_synchronize_all_states();
- /* In theory, the cpu_synchronize_all_states() call above wouldn't
- * affect the rest of the code, as the VCPU state inside CPUState
- * is supposed to always match the VCPU state on the kernel side.
- *
- * In practice, calling cpu_synchronize_state() too soon will load the
- * kernel-side APIC state into X86CPU.apic_state too early, APIC state
- * won't be reloaded later because CPUState.vcpu_dirty==true, and
- * outdated APIC state may be migrated to another host.
- *
- * The real fix would be to make sure outdated APIC state is read
- * from the kernel again when necessary. While this is not fixed, we
- * need the cpu_clean_all_dirty() call below.
- */
- cpu_clean_all_dirty();
+ kvm_synchronize_all_tsc();
ret = kvm_vm_ioctl(kvm_state, KVM_GET_CLOCK, &data);
if (ret < 0) {
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 64046cb..2a9953b 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -111,6 +111,51 @@ bool kvm_allows_irq0_override(void)
return !kvm_irqchip_in_kernel() || kvm_has_gsi_routing();
}
+static int kvm_get_tsc(CPUState *cs)
+{
+ X86CPU *cpu = X86_CPU(cs);
+ CPUX86State *env = &cpu->env;
+ struct {
+ struct kvm_msrs info;
+ struct kvm_msr_entry entries[1];
+ } msr_data;
+ int ret;
+
+ if (env->tsc_valid) {
+ return 0;
+ }
+
+ msr_data.info.nmsrs = 1;
+ msr_data.entries[0].index = MSR_IA32_TSC;
+ env->tsc_valid = !runstate_is_running();
+
+ ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MSRS, &msr_data);
+ if (ret < 0) {
+ return ret;
+ }
+
+ env->tsc = msr_data.entries[0].data;
+ return 0;
+}
+
+static inline void do_kvm_synchronize_tsc(void *arg)
+{
+ CPUState *cpu = arg;
+
+ kvm_get_tsc(cpu);
+}
+
+void kvm_synchronize_all_tsc(void)
+{
+ CPUState *cpu;
+
+ if (kvm_enabled()) {
+ CPU_FOREACH(cpu) {
+ run_on_cpu(cpu, do_kvm_synchronize_tsc, cpu);
+ }
+ }
+}
+
static struct kvm_cpuid2 *try_get_cpuid(KVMState *s, int max)
{
struct kvm_cpuid2 *cpuid;
diff --git a/target-i386/kvm_i386.h b/target-i386/kvm_i386.h
index e557e94..c1b312b 100644
--- a/target-i386/kvm_i386.h
+++ b/target-i386/kvm_i386.h
@@ -15,6 +15,7 @@
bool kvm_allows_irq0_override(void);
bool kvm_has_smm(void);
+void kvm_synchronize_all_tsc(void);
void kvm_arch_reset_vcpu(X86CPU *cs);
void kvm_arch_do_init_vcpu(X86CPU *cs);
--
2.5.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [Qemu-devel] [PULL 15/16] Revert "Introduce cpu_clean_all_dirty"
2015-11-05 10:33 [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 14/16] kvmclock: add a new function to update env->tsc Paolo Bonzini
@ 2015-11-05 10:33 ` Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 16/16] iscsi: Translate scsi sense into error code Paolo Bonzini
2015-11-05 12:39 ` [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Peter Maydell
3 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2015-11-05 10:33 UTC (permalink / raw)
To: qemu-devel; +Cc: Liang Li
From: Liang Li <liang.z.li@intel.com>
This reverts commit de9d61e83d43be9069e6646fa9d57a3f47779d28.
Now 'cpu_clean_all_dirty' is useless, we can revert the related code.
Conflicts:
include/sysemu/kvm.h
Signed-off-by: Liang Li <liang.z.li@intel.com>
Message-Id: <1446695464-27116-3-git-send-email-liang.z.li@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
cpus.c | 9 ---------
include/sysemu/cpus.h | 1 -
include/sysemu/kvm.h | 8 --------
kvm-all.c | 5 -----
4 files changed, 23 deletions(-)
diff --git a/cpus.c b/cpus.c
index d2e9e4f..c6a5d0e 100644
--- a/cpus.c
+++ b/cpus.c
@@ -694,15 +694,6 @@ void cpu_synchronize_all_post_init(void)
}
}
-void cpu_clean_all_dirty(void)
-{
- CPUState *cpu;
-
- CPU_FOREACH(cpu) {
- cpu_clean_state(cpu);
- }
-}
-
static int do_vm_stop(RunState state)
{
int ret = 0;
diff --git a/include/sysemu/cpus.h b/include/sysemu/cpus.h
index 30ddd12..3d1e5ba 100644
--- a/include/sysemu/cpus.h
+++ b/include/sysemu/cpus.h
@@ -11,7 +11,6 @@ void cpu_stop_current(void);
void cpu_synchronize_all_states(void);
void cpu_synchronize_all_post_reset(void);
void cpu_synchronize_all_post_init(void);
-void cpu_clean_all_dirty(void);
void qtest_clock_warp(int64_t dest);
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 461ef65..4ac6176 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -417,7 +417,6 @@ int kvm_physical_memory_addr_from_host(KVMState *s, void *ram_addr,
void kvm_cpu_synchronize_state(CPUState *cpu);
void kvm_cpu_synchronize_post_reset(CPUState *cpu);
void kvm_cpu_synchronize_post_init(CPUState *cpu);
-void kvm_cpu_clean_state(CPUState *cpu);
/* generic hooks - to be moved/refactored once there are more users */
@@ -442,13 +441,6 @@ static inline void cpu_synchronize_post_init(CPUState *cpu)
}
}
-static inline void cpu_clean_state(CPUState *cpu)
-{
- if (kvm_enabled()) {
- kvm_cpu_clean_state(cpu);
- }
-}
-
int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg, PCIDevice *dev);
int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg,
PCIDevice *dev);
diff --git a/kvm-all.c b/kvm-all.c
index c442838..1bc1273 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1766,11 +1766,6 @@ void kvm_cpu_synchronize_post_init(CPUState *cpu)
run_on_cpu(cpu, do_kvm_cpu_synchronize_post_init, cpu);
}
-void kvm_cpu_clean_state(CPUState *cpu)
-{
- cpu->kvm_vcpu_dirty = false;
-}
-
int kvm_cpu_exec(CPUState *cpu)
{
struct kvm_run *run = cpu->kvm_run;
--
2.5.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [Qemu-devel] [PULL 16/16] iscsi: Translate scsi sense into error code
2015-11-05 10:33 [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 14/16] kvmclock: add a new function to update env->tsc Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 15/16] Revert "Introduce cpu_clean_all_dirty" Paolo Bonzini
@ 2015-11-05 10:33 ` Paolo Bonzini
2015-11-05 12:39 ` [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Peter Maydell
3 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2015-11-05 10:33 UTC (permalink / raw)
To: qemu-devel; +Cc: Fam Zheng
From: Fam Zheng <famz@redhat.com>
Previously we return -EIO blindly when anything goes wrong. Add a helper
function to parse sense fields and try to make the return code more
meaningful.
This also fixes the default werror configuration (enospc) when we're
using qcow2 on an iscsi lun. The old -EIO not being treated as out of
space error failed to trigger vm stop.
Signed-off-by: Fam Zheng <famz@redhat.com>
Message-Id: <1446699609-11376-1-git-send-email-famz@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
block/iscsi.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 53 insertions(+), 6 deletions(-)
diff --git a/block/iscsi.c b/block/iscsi.c
index 9a628b7..26bd452 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -84,6 +84,7 @@ typedef struct IscsiTask {
IscsiLun *iscsilun;
QEMUTimer retry_timer;
bool force_next_flush;
+ int err_code;
} IscsiTask;
typedef struct IscsiAIOCB {
@@ -182,6 +183,51 @@ static inline unsigned exp_random(double mean)
#define QEMU_SCSI_STATUS_TIMEOUT SCSI_STATUS_TIMEOUT
#endif
+static int iscsi_translate_sense(struct scsi_sense *sense)
+{
+ int ret;
+
+ switch (sense->key) {
+ case SCSI_SENSE_NOT_READY:
+ return -EBUSY;
+ case SCSI_SENSE_DATA_PROTECTION:
+ return -EACCES;
+ case SCSI_SENSE_COMMAND_ABORTED:
+ return -ECANCELED;
+ case SCSI_SENSE_ILLEGAL_REQUEST:
+ /* Parse ASCQ */
+ break;
+ default:
+ return -EIO;
+ }
+ switch (sense->ascq) {
+ case SCSI_SENSE_ASCQ_PARAMETER_LIST_LENGTH_ERROR:
+ case SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE:
+ case SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB:
+ case SCSI_SENSE_ASCQ_INVALID_FIELD_IN_PARAMETER_LIST:
+ ret = -EINVAL;
+ break;
+ case SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE:
+ ret = -ENOSPC;
+ break;
+ case SCSI_SENSE_ASCQ_LOGICAL_UNIT_NOT_SUPPORTED:
+ ret = -ENOTSUP;
+ break;
+ case SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT:
+ case SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT_TRAY_CLOSED:
+ case SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT_TRAY_OPEN:
+ ret = -ENOMEDIUM;
+ break;
+ case SCSI_SENSE_ASCQ_WRITE_PROTECTED:
+ ret = -EACCES;
+ break;
+ default:
+ ret = -EIO;
+ break;
+ }
+ return ret;
+}
+
static void
iscsi_co_generic_cb(struct iscsi_context *iscsi, int status,
void *command_data, void *opaque)
@@ -226,6 +272,7 @@ iscsi_co_generic_cb(struct iscsi_context *iscsi, int status,
return;
}
}
+ iTask->err_code = iscsi_translate_sense(&task->sense);
error_report("iSCSI Failure: %s", iscsi_get_error(iscsi));
} else {
iTask->iscsilun->force_next_flush |= iTask->force_next_flush;
@@ -455,7 +502,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
iscsi_allocationmap_set(iscsilun, sector_num, nb_sectors);
@@ -644,7 +691,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
return 0;
@@ -683,7 +730,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
return 0;
@@ -703,7 +750,7 @@ iscsi_aio_ioctl_cb(struct iscsi_context *iscsi, int status,
if (status < 0) {
error_report("Failed to ioctl(SG_IO) to iSCSI lun. %s",
iscsi_get_error(iscsi));
- acb->status = -EIO;
+ acb->status = iscsi_translate_sense(&acb->task->sense);
}
acb->ioh->driver_status = 0;
@@ -905,7 +952,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
iscsi_allocationmap_clear(iscsilun, sector_num, nb_sectors);
@@ -999,7 +1046,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
if (flags & BDRV_REQ_MAY_UNMAP) {
--
2.5.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1
2015-11-05 10:33 [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Paolo Bonzini
` (2 preceding siblings ...)
2015-11-05 10:33 ` [Qemu-devel] [PULL 16/16] iscsi: Translate scsi sense into error code Paolo Bonzini
@ 2015-11-05 12:39 ` Peter Maydell
3 siblings, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2015-11-05 12:39 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU Developers
On 5 November 2015 at 10:33, Paolo Bonzini <pbonzini@redhat.com> wrote:
> The following changes since commit 7bc8e0c967a4ef77657174d28af775691e18b4ce:
>
> Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2015-10-29 09:49:52 +0000)
>
> are available in the git repository at:
>
> git://github.com/bonzini/qemu.git tags/for-upstream
>
> for you to fetch changes up to dd86c68e2644969350e807404ffce612f006e803:
>
> iscsi: Translate scsi sense into error code (2015-11-05 11:28:54 +0100)
>
> ----------------------------------------------------------------
> * Guest ABI fixes for PC machines (hw_version)
> * Fixes for recent Perl
> * John Snow's configure fixes
> * file-backed RAM improvements (Igor, Pavel)
> * -Werror=clobbered fixes (Stefan)
> * Kill -d ioport
> * Fix qemu-system-s390x
> * Performance improvement for kvmclock migration
Hi. I'm afraid this fails to build on the ppc64be box I have
access to:
/home/pm215/qemu/block/iscsi.c: In function ‘iscsi_translate_sense’:
/home/pm215/qemu/block/iscsi.c:204:10: error:
‘SCSI_SENSE_ASCQ_PARAMETER_LIST_LENGTH_ERROR’ undeclared (first use in
this function)
case SCSI_SENSE_ASCQ_PARAMETER_LIST_LENGTH_ERROR:
^
/home/pm215/qemu/block/iscsi.c:204:10: note: each undeclared
identifier is reported only once for each function it appears in
/home/pm215/qemu/block/iscsi.c:207:10: error:
‘SCSI_SENSE_ASCQ_INVALID_FIELD_IN_PARAMETER_LIST’ undeclared (first
use in this function)
case SCSI_SENSE_ASCQ_INVALID_FIELD_IN_PARAMETER_LIST:
^
(It's running Fedora 20, and has libiscsi-devel.ppc64 1.9.0-4.fc20
installed, which is our minimum version requirement.)
thanks
-- PMMH
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PULL v3 00/16] Misc changes for 2.5-rc1
@ 2015-11-05 14:21 Paolo Bonzini
2015-11-05 14:21 ` [Qemu-devel] [PULL 16/16] iscsi: Translate scsi sense into error code Paolo Bonzini
0 siblings, 1 reply; 6+ messages in thread
From: Paolo Bonzini @ 2015-11-05 14:21 UTC (permalink / raw)
To: qemu-devel; +Cc: Eduardo Habkost, Richard Henderson
The following changes since commit 7bc8e0c967a4ef77657174d28af775691e18b4ce:
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2015-10-29 09:49:52 +0000)
are available in the git repository at:
git://github.com/bonzini/qemu.git tags/for-upstream
for you to fetch changes up to e01dd3da5cf9aa90ae844d3b86c2c2762066edac:
iscsi: Translate scsi sense into error code (2015-11-05 14:42:19 +0100)
----------------------------------------------------------------
* Guest ABI fixes for PC machines (hw_version)
* Fixes for recent Perl
* John Snow's configure fixes
* file-backed RAM improvements (Igor, Pavel)
* -Werror=clobbered fixes (Stefan)
* Kill -d ioport
* Fix qemu-system-s390x
* Performance improvement for kvmclock migration
----------------------------------------------------------------
Eduardo Habkost (3):
pc: Set hw_version on all machine classes
osdep: Rename qemu_{get, set}_version() to qemu_{, set_}hw_version()
megasas: Use qemu_hw_version() instead of QEMU_VERSION
Fam Zheng (2):
scripts/text2pod.pl: Escape left brace
iscsi: Translate scsi sense into error code
Igor Mammedov (1):
file_ram_alloc: propagate error to caller instead of terminating QEMU
John Snow (2):
configure: disallow ccache during compile tests
configure: disable FORTIFY_SOURCE under clang
Liang Li (2):
kvmclock: add a new function to update env->tsc.
Revert "Introduce cpu_clean_all_dirty"
Paolo Bonzini (4):
target-i386: fix pcmpxstrx equal-ordered (strstr) mode
ioport: do not use CPU_LOG_IOPORT
qemu-log: remove -d ioport
memory: call begin, log_start and commit when registering a new listener
Pavel Fedin (1):
backends/hostmem-file: Allow to specify full pathname for backing file
Stefan Weil (1):
cpu-exec: Fix compiler warning (-Werror=clobbered)
block/iscsi.c | 93 +++++++++++++++++++++++++++++++++++++++-----------
configure | 21 +++++++++++-
cpu-exec.c | 18 ++++++++--
cpus.c | 9 -----
exec.c | 40 ++++++++++++----------
hw/arm/nseries.c | 2 +-
hw/i386/kvm/clock.c | 18 ++--------
hw/i386/pc_piix.c | 13 +++++++
hw/i386/pc_q35.c | 10 ++++++
hw/ide/core.c | 2 +-
hw/scsi/megasas.c | 2 +-
hw/scsi/scsi-bus.c | 2 +-
hw/scsi/scsi-disk.c | 2 +-
include/qemu/log.h | 1 -
include/qemu/osdep.h | 4 +--
include/sysemu/cpus.h | 1 -
include/sysemu/kvm.h | 8 -----
ioport.c | 26 ++++----------
kvm-all.c | 5 ---
memory.c | 9 +++++
qemu-doc.texi | 2 +-
qemu-log.c | 2 --
scripts/texi2pod.pl | 2 +-
target-i386/cpu.c | 2 +-
target-i386/kvm.c | 45 ++++++++++++++++++++++++
target-i386/kvm_i386.h | 1 +
target-i386/ops_sse.h | 4 +--
trace-events | 4 +--
util/osdep.c | 10 +++---
vl.c | 2 +-
30 files changed, 236 insertions(+), 124 deletions(-)
--
1.8.3.1
From: Paolo Bonzini <pbonzini@redhat.com>
Date: Mon, 12 Oct 2015 11:50:27 +0200
Subject: [PULL 03/16] target-i386: fix pcmpxstrx equal-ordered (strstr) mode
In this mode, referring an invalid element of the source forces the
result to false (table 4-7, last column) but referring an invalid
element of the destination forces the result to true, so the outer
loop should still be run even if some elements of the destination
will be invalid. They will be avoided in the inner loop, which
correctly bounds "i" to validd, but they will still contribute to a
positive outcome of the search.
This fixes tst_strstr in glibc 2.17.
Reported-by: Florian Weimer <fweimer@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
target-i386/ops_sse.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target-i386/ops_sse.h b/target-i386/ops_sse.h
index 7aa693a..1780d1d 100644
--- a/target-i386/ops_sse.h
+++ b/target-i386/ops_sse.h
@@ -2037,10 +2037,10 @@ static inline unsigned pcmpxstrx(CPUX86State *env, Reg *d, Reg *s,
}
break;
case 3:
- for (j = valids - validd; j >= 0; j--) {
+ for (j = valids; j >= 0; j--) {
res <<= 1;
v = 1;
- for (i = MIN(upper - j, validd); i >= 0; i--) {
+ for (i = MIN(valids - j, validd); i >= 0; i--) {
v &= (pcmp_val(s, ctrl, i + j) == pcmp_val(d, ctrl, i));
}
res |= v;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [Qemu-devel] [PULL 16/16] iscsi: Translate scsi sense into error code
2015-11-05 14:21 [Qemu-devel] [PULL v3 00/16] Misc changes for 2.5-rc1 Paolo Bonzini
@ 2015-11-05 14:21 ` Paolo Bonzini
0 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2015-11-05 14:21 UTC (permalink / raw)
To: qemu-devel; +Cc: Fam Zheng
From: Fam Zheng <famz@redhat.com>
Previously we return -EIO blindly when anything goes wrong. Add a helper
function to parse sense fields and try to make the return code more
meaningful.
This also fixes the default werror configuration (enospc) when we're
using qcow2 on an iscsi lun. The old -EIO not being treated as out of
space error failed to trigger vm stop.
Signed-off-by: Fam Zheng <famz@redhat.com>
Message-Id: <1446699609-11376-1-git-send-email-famz@redhat.com>
[libiscsi 1.9 compatibility - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
block/iscsi.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 73 insertions(+), 20 deletions(-)
diff --git a/block/iscsi.c b/block/iscsi.c
index 9a628b7..080ef52 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -84,6 +84,7 @@ typedef struct IscsiTask {
IscsiLun *iscsilun;
QEMUTimer retry_timer;
bool force_next_flush;
+ int err_code;
} IscsiTask;
typedef struct IscsiAIOCB {
@@ -169,19 +170,70 @@ static inline unsigned exp_random(double mean)
return -mean * log((double)rand() / RAND_MAX);
}
-/* SCSI_STATUS_TASK_SET_FULL and SCSI_STATUS_TIMEOUT were introduced
- * in libiscsi 1.10.0 as part of an enum. The LIBISCSI_API_VERSION
- * macro was introduced in 1.11.0. So use the API_VERSION macro as
- * a hint that the macros are defined and define them ourselves
- * otherwise to keep the required libiscsi version at 1.9.0 */
-#if !defined(LIBISCSI_API_VERSION)
-#define QEMU_SCSI_STATUS_TASK_SET_FULL 0x28
-#define QEMU_SCSI_STATUS_TIMEOUT 0x0f000002
-#else
-#define QEMU_SCSI_STATUS_TASK_SET_FULL SCSI_STATUS_TASK_SET_FULL
-#define QEMU_SCSI_STATUS_TIMEOUT SCSI_STATUS_TIMEOUT
+/* SCSI_SENSE_ASCQ_INVALID_FIELD_IN_PARAMETER_LIST was introduced in
+ * libiscsi 1.10.0, together with other constants we need. Use it as
+ * a hint that we have to define them ourselves if needed, to keep the
+ * minimum required libiscsi version at 1.9.0. We use an ASCQ macro for
+ * the test because SCSI_STATUS_* is an enum.
+ *
+ * To guard against future changes where SCSI_SENSE_ASCQ_* also becomes
+ * an enum, check against the LIBISCSI_API_VERSION macro, which was
+ * introduced in 1.11.0. If it is present, there is no need to define
+ * anything.
+ */
+#if !defined(SCSI_SENSE_ASCQ_INVALID_FIELD_IN_PARAMETER_LIST) && \
+ !defined(LIBISCSI_API_VERSION)
+#define SCSI_STATUS_TASK_SET_FULL 0x28
+#define SCSI_STATUS_TIMEOUT 0x0f000002
+#define SCSI_SENSE_ASCQ_INVALID_FIELD_IN_PARAMETER_LIST 0x2600
+#define SCSI_SENSE_ASCQ_PARAMETER_LIST_LENGTH_ERROR 0x1a00
#endif
+static int iscsi_translate_sense(struct scsi_sense *sense)
+{
+ int ret;
+
+ switch (sense->key) {
+ case SCSI_SENSE_NOT_READY:
+ return -EBUSY;
+ case SCSI_SENSE_DATA_PROTECTION:
+ return -EACCES;
+ case SCSI_SENSE_COMMAND_ABORTED:
+ return -ECANCELED;
+ case SCSI_SENSE_ILLEGAL_REQUEST:
+ /* Parse ASCQ */
+ break;
+ default:
+ return -EIO;
+ }
+ switch (sense->ascq) {
+ case SCSI_SENSE_ASCQ_PARAMETER_LIST_LENGTH_ERROR:
+ case SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE:
+ case SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB:
+ case SCSI_SENSE_ASCQ_INVALID_FIELD_IN_PARAMETER_LIST:
+ ret = -EINVAL;
+ break;
+ case SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE:
+ ret = -ENOSPC;
+ break;
+ case SCSI_SENSE_ASCQ_LOGICAL_UNIT_NOT_SUPPORTED:
+ ret = -ENOTSUP;
+ break;
+ case SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT:
+ case SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT_TRAY_CLOSED:
+ case SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT_TRAY_OPEN:
+ ret = -ENOMEDIUM;
+ break;
+ case SCSI_SENSE_ASCQ_WRITE_PROTECTED:
+ ret = -EACCES;
+ break;
+ default:
+ ret = -EIO;
+ break;
+ }
+ return ret;
+}
+
static void
iscsi_co_generic_cb(struct iscsi_context *iscsi, int status,
void *command_data, void *opaque)
@@ -203,11 +255,11 @@ iscsi_co_generic_cb(struct iscsi_context *iscsi, int status,
goto out;
}
if (status == SCSI_STATUS_BUSY ||
- status == QEMU_SCSI_STATUS_TIMEOUT ||
- status == QEMU_SCSI_STATUS_TASK_SET_FULL) {
+ status == SCSI_STATUS_TIMEOUT ||
+ status == SCSI_STATUS_TASK_SET_FULL) {
unsigned retry_time =
exp_random(iscsi_retry_times[iTask->retries - 1]);
- if (status == QEMU_SCSI_STATUS_TIMEOUT) {
+ if (status == SCSI_STATUS_TIMEOUT) {
/* make sure the request is rescheduled AFTER the
* reconnect is initiated */
retry_time = EVENT_INTERVAL * 2;
@@ -226,6 +278,7 @@ iscsi_co_generic_cb(struct iscsi_context *iscsi, int status,
return;
}
}
+ iTask->err_code = iscsi_translate_sense(&task->sense);
error_report("iSCSI Failure: %s", iscsi_get_error(iscsi));
} else {
iTask->iscsilun->force_next_flush |= iTask->force_next_flush;
@@ -455,7 +508,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
iscsi_allocationmap_set(iscsilun, sector_num, nb_sectors);
@@ -644,7 +697,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
return 0;
@@ -683,7 +736,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
return 0;
@@ -703,7 +756,7 @@ iscsi_aio_ioctl_cb(struct iscsi_context *iscsi, int status,
if (status < 0) {
error_report("Failed to ioctl(SG_IO) to iSCSI lun. %s",
iscsi_get_error(iscsi));
- acb->status = -EIO;
+ acb->status = iscsi_translate_sense(&acb->task->sense);
}
acb->ioh->driver_status = 0;
@@ -905,7 +958,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
iscsi_allocationmap_clear(iscsilun, sector_num, nb_sectors);
@@ -999,7 +1052,7 @@ retry:
}
if (iTask.status != SCSI_STATUS_GOOD) {
- return -EIO;
+ return iTask.err_code;
}
if (flags & BDRV_REQ_MAY_UNMAP) {
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-11-05 14:22 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-05 10:33 [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 14/16] kvmclock: add a new function to update env->tsc Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 15/16] Revert "Introduce cpu_clean_all_dirty" Paolo Bonzini
2015-11-05 10:33 ` [Qemu-devel] [PULL 16/16] iscsi: Translate scsi sense into error code Paolo Bonzini
2015-11-05 12:39 ` [Qemu-devel] [PULL v2 00/16] Misc patches for QEMU 2.5-rc1 Peter Maydell
-- strict thread matches above, loose matches on Subject: below --
2015-11-05 14:21 [Qemu-devel] [PULL v3 00/16] Misc changes for 2.5-rc1 Paolo Bonzini
2015-11-05 14:21 ` [Qemu-devel] [PULL 16/16] iscsi: Translate scsi sense into error code Paolo Bonzini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).