mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
- scsi: improvements to error reporting and conversion to realize,
Coverity/sparse fix for iscsi driver - RCU fallout: fix -daemonize and s390x system emulation - KVM: kvm_stat improvements and new man page - x86: SYSRET fix for VxWorks -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQEcBAABAgAGBQJU/sUFAAoJEL/70l94x66D1JwIAJ28Lan2DQwi+xHvNxF8zW6n v7eMc04/fepuon0TYmUZC3qbqc00sccEQZQ+yAAauT9epZ/kdSDudDOzG+3F4MuQ /X3crXw2/jrhtWedGq49vFCONX4MKoaoudqK8kOFMe1ImQgkOYeAzOoqeFXyHsFh jINlKTJZB6oKzrZ+SYryY14cO7pvGaIhyqaCC+6GcVihTjm9Yq13lP1lFj7LsVRV aGfd6xH9RSV/mwzvZwD4i3cUWSUaV/wY0NDhAEzDPCUcxX0/nAj3XF1YeJUF30Qd ETaCLo/Nxq2R6POK3c/Zm/FRLvjzZ2caD+q1LcwB/bCYdc2lJ1JDxE/hr48ANv0= =OWXY -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging - scsi: improvements to error reporting and conversion to realize, Coverity/sparse fix for iscsi driver - RCU fallout: fix -daemonize and s390x system emulation - KVM: kvm_stat improvements and new man page - x86: SYSRET fix for VxWorks # gpg: Signature made Tue Mar 10 10:18:45 2015 GMT using RSA key ID 78C7AE83 # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini/tags/for-upstream: x86: fix SS selector in SYSRET scsi: Convert remaining PCI HBAs to realize() scsi: Improve error reporting for invalid drive property hw: Propagate errors through qdev_prop_set_drive() scsi: Clean up duplicated error in legacy if=scsi code cpus: initialize cpu->memory_dispatch rcu: handle forks safely qemu-thread: do not use PTHREAD_MUTEX_ERRORCHECK kvm_stat: add kvm_stat.1 man page kvm_stat: add column headers to text UI iscsi: Fix check for username Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
23a7a28796
19 changed files with 152 additions and 75 deletions
|
@ -515,9 +515,9 @@ static pflash_t *ve_pflash_cfi01_register(hwaddr base, const char *name,
|
|||
{
|
||||
DeviceState *dev = qdev_create(NULL, "cfi.pflash01");
|
||||
|
||||
if (di && qdev_prop_set_drive(dev, "drive",
|
||||
blk_by_legacy_dinfo(di))) {
|
||||
abort();
|
||||
if (di) {
|
||||
qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(di),
|
||||
&error_abort);
|
||||
}
|
||||
|
||||
qdev_prop_set_uint32(dev, "num-blocks",
|
||||
|
|
|
@ -522,9 +522,9 @@ static void create_one_flash(const char *name, hwaddr flashbase,
|
|||
DeviceState *dev = qdev_create(NULL, "cfi.pflash01");
|
||||
const uint64_t sectorlength = 256 * 1024;
|
||||
|
||||
if (dinfo && qdev_prop_set_drive(dev, "drive",
|
||||
blk_by_legacy_dinfo(dinfo))) {
|
||||
abort();
|
||||
if (dinfo) {
|
||||
qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&error_abort);
|
||||
}
|
||||
|
||||
qdev_prop_set_uint32(dev, "num-blocks", flashsize / sectorlength);
|
||||
|
|
|
@ -969,8 +969,8 @@ pflash_t *pflash_cfi01_register(hwaddr base,
|
|||
{
|
||||
DeviceState *dev = qdev_create(NULL, TYPE_CFI_PFLASH01);
|
||||
|
||||
if (blk && qdev_prop_set_drive(dev, "drive", blk)) {
|
||||
abort();
|
||||
if (blk) {
|
||||
qdev_prop_set_drive(dev, "drive", blk, &error_abort);
|
||||
}
|
||||
qdev_prop_set_uint32(dev, "num-blocks", nb_blocs);
|
||||
qdev_prop_set_uint64(dev, "sector-length", sector_len);
|
||||
|
|
|
@ -773,8 +773,8 @@ pflash_t *pflash_cfi02_register(hwaddr base,
|
|||
{
|
||||
DeviceState *dev = qdev_create(NULL, TYPE_CFI_PFLASH02);
|
||||
|
||||
if (blk && qdev_prop_set_drive(dev, "drive", blk)) {
|
||||
abort();
|
||||
if (blk) {
|
||||
qdev_prop_set_drive(dev, "drive", blk, &error_abort);
|
||||
}
|
||||
qdev_prop_set_uint32(dev, "num-blocks", nb_blocs);
|
||||
qdev_prop_set_uint32(dev, "sector-length", sector_len);
|
||||
|
|
|
@ -341,27 +341,25 @@ PropertyInfo qdev_prop_vlan = {
|
|||
.set = set_vlan,
|
||||
};
|
||||
|
||||
int qdev_prop_set_drive(DeviceState *dev, const char *name,
|
||||
BlockBackend *value)
|
||||
void qdev_prop_set_drive(DeviceState *dev, const char *name,
|
||||
BlockBackend *value, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
object_property_set_str(OBJECT(dev),
|
||||
value ? blk_name(value) : "", name, &err);
|
||||
if (err) {
|
||||
qerror_report_err(err);
|
||||
error_free(err);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
object_property_set_str(OBJECT(dev), value ? blk_name(value) : "",
|
||||
name, errp);
|
||||
}
|
||||
|
||||
void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name,
|
||||
BlockBackend *value)
|
||||
{
|
||||
if (qdev_prop_set_drive(dev, name, value) < 0) {
|
||||
Error *err = NULL;
|
||||
|
||||
qdev_prop_set_drive(dev, name, value, &err);
|
||||
if (err) {
|
||||
error_report_err(err);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void qdev_prop_set_chr(DeviceState *dev, const char *name,
|
||||
CharDriverState *value)
|
||||
{
|
||||
|
|
|
@ -342,13 +342,12 @@ static const struct SCSIBusInfo esp_pci_scsi_info = {
|
|||
.cancel = esp_request_cancelled,
|
||||
};
|
||||
|
||||
static int esp_pci_scsi_init(PCIDevice *dev)
|
||||
static void esp_pci_scsi_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
PCIESPState *pci = PCI_ESP(dev);
|
||||
DeviceState *d = DEVICE(dev);
|
||||
ESPState *s = &pci->esp;
|
||||
uint8_t *pci_conf;
|
||||
Error *err = NULL;
|
||||
|
||||
pci_conf = dev->config;
|
||||
|
||||
|
@ -367,13 +366,8 @@ static int esp_pci_scsi_init(PCIDevice *dev)
|
|||
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info, NULL);
|
||||
if (!d->hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
error_free(err);
|
||||
return -1;
|
||||
}
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void esp_pci_scsi_uninit(PCIDevice *d)
|
||||
|
@ -388,7 +382,7 @@ static void esp_pci_class_init(ObjectClass *klass, void *data)
|
|||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = esp_pci_scsi_init;
|
||||
k->realize = esp_pci_scsi_realize;
|
||||
k->exit = esp_pci_scsi_uninit;
|
||||
k->vendor_id = PCI_VENDOR_ID_AMD;
|
||||
k->device_id = PCI_DEVICE_ID_AMD_SCSI;
|
||||
|
@ -466,17 +460,19 @@ static void dc390_write_config(PCIDevice *dev,
|
|||
}
|
||||
}
|
||||
|
||||
static int dc390_scsi_init(PCIDevice *dev)
|
||||
static void dc390_scsi_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
DC390State *pci = DC390(dev);
|
||||
Error *err = NULL;
|
||||
uint8_t *contents;
|
||||
uint16_t chksum = 0;
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
/* init base class */
|
||||
ret = esp_pci_scsi_init(dev);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
esp_pci_scsi_realize(dev, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
/* EEPROM */
|
||||
|
@ -503,8 +499,6 @@ static int dc390_scsi_init(PCIDevice *dev)
|
|||
chksum = 0x1234 - chksum;
|
||||
contents[EE_CHKSUM1] = chksum & 0xff;
|
||||
contents[EE_CHKSUM2] = chksum >> 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dc390_class_init(ObjectClass *klass, void *data)
|
||||
|
@ -512,7 +506,7 @@ static void dc390_class_init(ObjectClass *klass, void *data)
|
|||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = dc390_scsi_init;
|
||||
k->realize = dc390_scsi_realize;
|
||||
k->config_read = dc390_read_config;
|
||||
k->config_write = dc390_write_config;
|
||||
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include "hw/pci/pci.h"
|
||||
#include "hw/scsi/scsi.h"
|
||||
#include "sysemu/dma.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
//#define DEBUG_LSI
|
||||
//#define DEBUG_LSI_REG
|
||||
|
@ -2089,12 +2088,11 @@ static const struct SCSIBusInfo lsi_scsi_info = {
|
|||
.cancel = lsi_request_cancelled
|
||||
};
|
||||
|
||||
static int lsi_scsi_init(PCIDevice *dev)
|
||||
static void lsi_scsi_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
LSIState *s = LSI53C895A(dev);
|
||||
DeviceState *d = DEVICE(dev);
|
||||
uint8_t *pci_conf;
|
||||
Error *err = NULL;
|
||||
|
||||
pci_conf = dev->config;
|
||||
|
||||
|
@ -2117,13 +2115,8 @@ static int lsi_scsi_init(PCIDevice *dev)
|
|||
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), d, &lsi_scsi_info, NULL);
|
||||
if (!d->hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
error_free(err);
|
||||
return -1;
|
||||
}
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void lsi_class_init(ObjectClass *klass, void *data)
|
||||
|
@ -2131,7 +2124,7 @@ static void lsi_class_init(ObjectClass *klass, void *data)
|
|||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = lsi_scsi_init;
|
||||
k->realize = lsi_scsi_realize;
|
||||
k->vendor_id = PCI_VENDOR_ID_LSI_LOGIC;
|
||||
k->device_id = PCI_DEVICE_ID_LSI_53C895A;
|
||||
k->class_id = PCI_CLASS_STORAGE_SCSI;
|
||||
|
|
|
@ -2320,14 +2320,13 @@ static const struct SCSIBusInfo megasas_scsi_info = {
|
|||
.cancel = megasas_command_cancel,
|
||||
};
|
||||
|
||||
static int megasas_scsi_init(PCIDevice *dev)
|
||||
static void megasas_scsi_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
DeviceState *d = DEVICE(dev);
|
||||
MegasasState *s = MEGASAS(dev);
|
||||
MegasasBaseClass *b = MEGASAS_DEVICE_GET_CLASS(s);
|
||||
uint8_t *pci_conf;
|
||||
int i, bar_type;
|
||||
Error *err = NULL;
|
||||
|
||||
pci_conf = dev->config;
|
||||
|
||||
|
@ -2407,13 +2406,8 @@ static int megasas_scsi_init(PCIDevice *dev)
|
|||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
||||
&megasas_scsi_info, NULL);
|
||||
if (!d->hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
error_free(err);
|
||||
return -1;
|
||||
}
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2507,7 +2501,7 @@ static void megasas_class_init(ObjectClass *oc, void *data)
|
|||
MegasasBaseClass *e = MEGASAS_DEVICE_CLASS(oc);
|
||||
const MegasasInfo *info = data;
|
||||
|
||||
pc->init = megasas_scsi_init;
|
||||
pc->realize = megasas_scsi_realize;
|
||||
pc->exit = megasas_scsi_uninit;
|
||||
pc->vendor_id = PCI_VENDOR_ID_LSI_LOGIC;
|
||||
pc->device_id = info->device_id;
|
||||
|
|
|
@ -242,8 +242,9 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
|||
if (serial && object_property_find(OBJECT(dev), "serial", NULL)) {
|
||||
qdev_prop_set_string(dev, "serial", serial);
|
||||
}
|
||||
if (qdev_prop_set_drive(dev, "drive", blk) < 0) {
|
||||
error_setg(errp, "Setting drive property failed");
|
||||
qdev_prop_set_drive(dev, "drive", blk, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
object_unparent(OBJECT(dev));
|
||||
return NULL;
|
||||
}
|
||||
|
@ -273,7 +274,6 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, Error **errp)
|
|||
scsi_bus_legacy_add_drive(bus, blk_by_legacy_dinfo(dinfo),
|
||||
unit, false, -1, NULL, &err);
|
||||
if (err != NULL) {
|
||||
error_report("%s", error_get_pretty(err));
|
||||
error_propagate(errp, err);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -664,6 +664,7 @@ static void usb_msd_realize_bot(USBDevice *dev, Error **errp)
|
|||
static USBDevice *usb_msd_init(USBBus *bus, const char *filename)
|
||||
{
|
||||
static int nr=0;
|
||||
Error *err = NULL;
|
||||
char id[8];
|
||||
QemuOpts *opts;
|
||||
DriveInfo *dinfo;
|
||||
|
@ -707,8 +708,10 @@ static USBDevice *usb_msd_init(USBBus *bus, const char *filename)
|
|||
|
||||
/* create guest device */
|
||||
dev = usb_create(bus, "usb-storage");
|
||||
if (qdev_prop_set_drive(&dev->qdev, "drive",
|
||||
blk_by_legacy_dinfo(dinfo)) < 0) {
|
||||
qdev_prop_set_drive(&dev->qdev, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&err);
|
||||
if (err) {
|
||||
error_report_err(err);
|
||||
object_unparent(OBJECT(dev));
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue