Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/814958/?format=api
{ "id": 814958, "url": "http://patchwork.ozlabs.org/api/patches/814958/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/c4d27b4b5d9e37468e63e35214ce4833ca271542.1505737465.git.maozy.fnst@cn.fujitsu.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<c4d27b4b5d9e37468e63e35214ce4833ca271542.1505737465.git.maozy.fnst@cn.fujitsu.com>", "list_archive_url": null, "date": "2017-09-18T14:05:13", "name": "[v3,1/6] hw/ide: Convert DeviceClass init to realize", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "17d45d7a0b0fda2819efbc7700d7e53075317a07", "submitter": { "id": 71231, "url": "http://patchwork.ozlabs.org/api/people/71231/?format=api", "name": "Mao Zhongyi", "email": "maozy.fnst@cn.fujitsu.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/c4d27b4b5d9e37468e63e35214ce4833ca271542.1505737465.git.maozy.fnst@cn.fujitsu.com/mbox/", "series": [ { "id": 3655, "url": "http://patchwork.ozlabs.org/api/series/3655/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=3655", "date": "2017-09-18T14:05:14", "name": "Convert to realize and improve error handling", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/3655/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/814958/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/814958/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "Received": [ "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xwp1p6989z9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 19 Sep 2017 00:15:26 +1000 (AEST)", "from localhost ([::1]:36888 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dtwpY-0006ZO-VM\n\tfor incoming@patchwork.ozlabs.org; Mon, 18 Sep 2017 10:15:25 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:42946)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <maozy.fnst@cn.fujitsu.com>) id 1dtwiW-0000iE-BV\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 10:08:11 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <maozy.fnst@cn.fujitsu.com>) id 1dtwiP-0006PA-LO\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 10:08:08 -0400", "from mail.cn.fujitsu.com ([183.91.158.132]:20987\n\thelo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <maozy.fnst@cn.fujitsu.com>) id 1dtwiP-0006Nj-0O\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 10:08:01 -0400", "from localhost (HELO cn.fujitsu.com) ([10.167.33.5])\n\tby heian.cn.fujitsu.com with ESMTP; 18 Sep 2017 22:07:50 +0800", "from G08CNEXCHPEKD03.g08.fujitsu.local (unknown [10.167.33.85])\n\tby cn.fujitsu.com (Postfix) with ESMTP id 4F5FD47ACDAE;\n\tMon, 18 Sep 2017 22:07:46 +0800 (CST)", "from maozy.g08.fujitsu.local (10.167.225.76) by\n\tG08CNEXCHPEKD03.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP\n\tServer (TLS) id 14.3.361.1; Mon, 18 Sep 2017 22:07:48 +0800" ], "X-IronPort-AV": "E=Sophos;i=\"5.42,413,1500912000\"; d=\"scan'208\";a=\"26773969\"", "From": "Mao Zhongyi <maozy.fnst@cn.fujitsu.com>", "To": "<qemu-devel@nongnu.org>", "Date": "Mon, 18 Sep 2017 22:05:13 +0800", "Message-ID": "<c4d27b4b5d9e37468e63e35214ce4833ca271542.1505737465.git.maozy.fnst@cn.fujitsu.com>", "X-Mailer": "git-send-email 2.9.4", "In-Reply-To": "<cover.1505737465.git.maozy.fnst@cn.fujitsu.com>", "References": "<cover.1505737465.git.maozy.fnst@cn.fujitsu.com>", "MIME-Version": "1.0", "Content-Type": "text/plain", "X-Originating-IP": "[10.167.225.76]", "X-yoursite-MailScanner-ID": "4F5FD47ACDAE.A61A2", "X-yoursite-MailScanner": "Found to be clean", "X-yoursite-MailScanner-From": "maozy.fnst@cn.fujitsu.com", "X-detected-operating-system": "by eggs.gnu.org: Genre and OS details not\n\trecognized.", "X-Received-From": "183.91.158.132", "Subject": "[Qemu-devel] [PATCH v3 1/6] hw/ide: Convert DeviceClass init to\n\trealize", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Kevin Wolf <kwolf@redhat.com>, John Snow <jsnow@redhat.com>,\n\tMarkus Armbruster <armbru@redhat.com>, Max Reitz <mreitz@redhat.com>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "Replace init with realize in IDEDeviceClass, which has errp\nas a parameter. So all the implementations now use error_setg\ninstead of error_report for reporting error.\n\nCc: John Snow <jsnow@redhat.com>\nCc: Markus Armbruster <armbru@redhat.com>\nCc: Kevin Wolf <kwolf@redhat.com>\nCc: Max Reitz <mreitz@redhat.com>\n\nSigned-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>\nReviewed-by: John Snow <jsnow@redhat.com>\n---\n hw/ide/core.c | 7 ++--\n hw/ide/qdev.c | 86 +++++++++++++++++++++----------------------\n include/hw/ide/internal.h | 5 ++-\n tests/qemu-iotests/051.pc.out | 10 +----\n 4 files changed, 51 insertions(+), 57 deletions(-)", "diff": "diff --git a/hw/ide/core.c b/hw/ide/core.c\nindex bea3953..dcf3dab 100644\n--- a/hw/ide/core.c\n+++ b/hw/ide/core.c\n@@ -34,6 +34,7 @@\n #include \"hw/block/block.h\"\n #include \"sysemu/block-backend.h\"\n #include \"qemu/cutils.h\"\n+#include \"qemu/error-report.h\"\n \n #include \"hw/ide/internal.h\"\n \n@@ -2406,7 +2407,7 @@ int ide_init_drive(IDEState *s, BlockBackend *blk, IDEDriveKind kind,\n const char *version, const char *serial, const char *model,\n uint64_t wwn,\n uint32_t cylinders, uint32_t heads, uint32_t secs,\n- int chs_trans)\n+ int chs_trans, Error **errp)\n {\n uint64_t nb_sectors;\n \n@@ -2431,11 +2432,11 @@ int ide_init_drive(IDEState *s, BlockBackend *blk, IDEDriveKind kind,\n blk_set_guest_block_size(blk, 2048);\n } else {\n if (!blk_is_inserted(s->blk)) {\n- error_report(\"Device needs media, but drive is empty\");\n+ error_setg(errp, \"Device needs media, but drive is empty\");\n return -1;\n }\n if (blk_is_read_only(blk)) {\n- error_report(\"Can't use a read-only drive\");\n+ error_setg(errp, \"Can't use a read-only drive\");\n return -1;\n }\n blk_set_dev_ops(blk, &ide_hd_block_ops, s);\ndiff --git a/hw/ide/qdev.c b/hw/ide/qdev.c\nindex cc2f5bd..d60ac25 100644\n--- a/hw/ide/qdev.c\n+++ b/hw/ide/qdev.c\n@@ -80,7 +80,7 @@ static char *idebus_get_fw_dev_path(DeviceState *dev)\n return g_strdup(path);\n }\n \n-static int ide_qdev_init(DeviceState *qdev)\n+static void ide_qdev_realize(DeviceState *qdev, Error **errp)\n {\n IDEDevice *dev = IDE_DEVICE(qdev);\n IDEDeviceClass *dc = IDE_DEVICE_GET_CLASS(dev);\n@@ -91,34 +91,31 @@ static int ide_qdev_init(DeviceState *qdev)\n }\n \n if (dev->unit >= bus->max_units) {\n- error_report(\"Can't create IDE unit %d, bus supports only %d units\",\n+ error_setg(errp, \"Can't create IDE unit %d, bus supports only %d units\",\n dev->unit, bus->max_units);\n- goto err;\n+ return;\n }\n \n switch (dev->unit) {\n case 0:\n if (bus->master) {\n- error_report(\"IDE unit %d is in use\", dev->unit);\n- goto err;\n+ error_setg(errp, \"IDE unit %d is in use\", dev->unit);\n+ return;\n }\n bus->master = dev;\n break;\n case 1:\n if (bus->slave) {\n- error_report(\"IDE unit %d is in use\", dev->unit);\n- goto err;\n+ error_setg(errp, \"IDE unit %d is in use\", dev->unit);\n+ return;\n }\n bus->slave = dev;\n break;\n default:\n- error_report(\"Invalid IDE unit %d\", dev->unit);\n- goto err;\n+ error_setg(errp, \"Invalid IDE unit %d\", dev->unit);\n+ return;\n }\n- return dc->init(dev);\n-\n-err:\n- return -1;\n+ dc->realize(dev, errp);\n }\n \n IDEDevice *ide_create_drive(IDEBus *bus, int unit, DriveInfo *drive)\n@@ -159,7 +156,7 @@ typedef struct IDEDrive {\n IDEDevice dev;\n } IDEDrive;\n \n-static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)\n+static void ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind, Error **errp)\n {\n IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus);\n IDEState *s = bus->ifs + dev->unit;\n@@ -168,8 +165,8 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)\n \n if (!dev->conf.blk) {\n if (kind != IDE_CD) {\n- error_report(\"No drive specified\");\n- return -1;\n+ error_setg(errp, \"No drive specified\");\n+ return;\n } else {\n /* Anonymous BlockBackend for an empty drive */\n dev->conf.blk = blk_new(0, BLK_PERM_ALL);\n@@ -182,36 +179,36 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)\n dev->conf.discard_granularity = 512;\n } else if (dev->conf.discard_granularity &&\n dev->conf.discard_granularity != 512) {\n- error_report(\"discard_granularity must be 512 for ide\");\n- return -1;\n+ error_setg(errp, \"discard_granularity must be 512 for ide\");\n+ return;\n }\n \n blkconf_blocksizes(&dev->conf);\n if (dev->conf.logical_block_size != 512) {\n- error_report(\"logical_block_size must be 512 for IDE\");\n- return -1;\n+ error_setg(errp, \"logical_block_size must be 512 for IDE\");\n+ return;\n }\n \n blkconf_serial(&dev->conf, &dev->serial);\n if (kind != IDE_CD) {\n blkconf_geometry(&dev->conf, &dev->chs_trans, 65535, 16, 255, &err);\n if (err) {\n- error_report_err(err);\n- return -1;\n+ error_propagate(errp, err);\n+ return;\n }\n }\n blkconf_apply_backend_options(&dev->conf, kind == IDE_CD, kind != IDE_CD,\n &err);\n if (err) {\n- error_report_err(err);\n- return -1;\n+ error_propagate(errp, err);\n+ return;\n }\n \n if (ide_init_drive(s, dev->conf.blk, kind,\n dev->version, dev->serial, dev->model, dev->wwn,\n dev->conf.cyls, dev->conf.heads, dev->conf.secs,\n- dev->chs_trans) < 0) {\n- return -1;\n+ dev->chs_trans, errp) < 0) {\n+ return;\n }\n \n if (!dev->version) {\n@@ -223,8 +220,6 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)\n \n add_boot_device_path(dev->conf.bootindex, &dev->qdev,\n dev->unit ? \"/disk@1\" : \"/disk@0\");\n-\n- return 0;\n }\n \n static void ide_dev_get_bootindex(Object *obj, Visitor *v, const char *name,\n@@ -270,17 +265,17 @@ static void ide_dev_instance_init(Object *obj)\n object_property_set_int(obj, -1, \"bootindex\", NULL);\n }\n \n-static int ide_hd_initfn(IDEDevice *dev)\n+static void ide_hd_realize(IDEDevice *dev, Error **errp)\n {\n- return ide_dev_initfn(dev, IDE_HD);\n+ ide_dev_initfn(dev, IDE_HD, errp);\n }\n \n-static int ide_cd_initfn(IDEDevice *dev)\n+static void ide_cd_realize(IDEDevice *dev, Error **errp)\n {\n- return ide_dev_initfn(dev, IDE_CD);\n+ ide_dev_initfn(dev, IDE_CD, errp);\n }\n \n-static int ide_drive_initfn(IDEDevice *dev)\n+static void ide_drive_realize(IDEDevice *dev, Error **errp)\n {\n DriveInfo *dinfo = NULL;\n \n@@ -288,7 +283,7 @@ static int ide_drive_initfn(IDEDevice *dev)\n dinfo = blk_legacy_dinfo(dev->conf.blk);\n }\n \n- return ide_dev_initfn(dev, dinfo && dinfo->media_cd ? IDE_CD : IDE_HD);\n+ ide_dev_initfn(dev, dinfo && dinfo->media_cd ? IDE_CD : IDE_HD, errp);\n }\n \n #define DEFINE_IDE_DEV_PROPERTIES() \\\n@@ -311,10 +306,11 @@ static void ide_hd_class_init(ObjectClass *klass, void *data)\n {\n DeviceClass *dc = DEVICE_CLASS(klass);\n IDEDeviceClass *k = IDE_DEVICE_CLASS(klass);\n- k->init = ide_hd_initfn;\n+\n+ k->realize = ide_hd_realize;\n dc->fw_name = \"drive\";\n- dc->desc = \"virtual IDE disk\";\n- dc->props = ide_hd_properties;\n+ dc->desc = \"virtual IDE disk\";\n+ dc->props = ide_hd_properties;\n }\n \n static const TypeInfo ide_hd_info = {\n@@ -333,10 +329,11 @@ static void ide_cd_class_init(ObjectClass *klass, void *data)\n {\n DeviceClass *dc = DEVICE_CLASS(klass);\n IDEDeviceClass *k = IDE_DEVICE_CLASS(klass);\n- k->init = ide_cd_initfn;\n+\n+ k->realize = ide_cd_realize;\n dc->fw_name = \"drive\";\n- dc->desc = \"virtual IDE CD-ROM\";\n- dc->props = ide_cd_properties;\n+ dc->desc = \"virtual IDE CD-ROM\";\n+ dc->props = ide_cd_properties;\n }\n \n static const TypeInfo ide_cd_info = {\n@@ -355,10 +352,11 @@ static void ide_drive_class_init(ObjectClass *klass, void *data)\n {\n DeviceClass *dc = DEVICE_CLASS(klass);\n IDEDeviceClass *k = IDE_DEVICE_CLASS(klass);\n- k->init = ide_drive_initfn;\n+\n+ k->realize = ide_drive_realize;\n dc->fw_name = \"drive\";\n- dc->desc = \"virtual IDE disk or CD-ROM (legacy)\";\n- dc->props = ide_drive_properties;\n+ dc->desc = \"virtual IDE disk or CD-ROM (legacy)\";\n+ dc->props = ide_drive_properties;\n }\n \n static const TypeInfo ide_drive_info = {\n@@ -371,7 +369,7 @@ static const TypeInfo ide_drive_info = {\n static void ide_device_class_init(ObjectClass *klass, void *data)\n {\n DeviceClass *k = DEVICE_CLASS(klass);\n- k->init = ide_qdev_init;\n+ k->realize = ide_qdev_realize;\n set_bit(DEVICE_CATEGORY_STORAGE, k->categories);\n k->bus_type = TYPE_IDE_BUS;\n k->props = ide_props;\ndiff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h\nindex 482a951..5ebb4c9 100644\n--- a/include/hw/ide/internal.h\n+++ b/include/hw/ide/internal.h\n@@ -12,6 +12,7 @@\n #include \"sysemu/sysemu.h\"\n #include \"hw/block/block.h\"\n #include \"block/scsi.h\"\n+#include \"qapi/error.h\"\n \n /* debug IDE devices */\n //#define DEBUG_IDE\n@@ -495,7 +496,7 @@ struct IDEBus {\n \n typedef struct IDEDeviceClass {\n DeviceClass parent_class;\n- int (*init)(IDEDevice *dev);\n+ void (*realize)(IDEDevice *dev, Error **errp);\n } IDEDeviceClass;\n \n struct IDEDevice {\n@@ -605,7 +606,7 @@ int ide_init_drive(IDEState *s, BlockBackend *blk, IDEDriveKind kind,\n const char *version, const char *serial, const char *model,\n uint64_t wwn,\n uint32_t cylinders, uint32_t heads, uint32_t secs,\n- int chs_trans);\n+ int chs_trans, Error **errp);\n void ide_init2(IDEBus *bus, qemu_irq irq);\n void ide_exit(IDEState *s);\n void ide_init_ioport(IDEBus *bus, ISADevice *isa, int iobase, int iobase2);\ndiff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out\nindex 76d7205..762fb9f 100644\n--- a/tests/qemu-iotests/051.pc.out\n+++ b/tests/qemu-iotests/051.pc.out\n@@ -123,8 +123,7 @@ quit\n \n Testing: -drive if=ide\n QEMU X.Y.Z monitor - type 'help' for more information\n-(qemu) QEMU_PROG: Device needs media, but drive is empty\n-QEMU_PROG: Initialization of device ide-hd failed: Device initialization failed.\n+(qemu) QEMU_PROG: Initialization of device ide-hd failed: Device needs media, but drive is empty\n \n Testing: -drive if=scsi\n QEMU X.Y.Z monitor - type 'help' for more information\n@@ -146,12 +145,10 @@ QEMU X.Y.Z monitor - type 'help' for more information\n Testing: -drive if=none,id=disk -device ide-drive,drive=disk\n QEMU X.Y.Z monitor - type 'help' for more information\n (qemu) QEMU_PROG: -device ide-drive,drive=disk: Device needs media, but drive is empty\n-QEMU_PROG: -device ide-drive,drive=disk: Device initialization failed.\n \n Testing: -drive if=none,id=disk -device ide-hd,drive=disk\n QEMU X.Y.Z monitor - type 'help' for more information\n (qemu) QEMU_PROG: -device ide-hd,drive=disk: Device needs media, but drive is empty\n-QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed.\n \n Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk\n QEMU X.Y.Z monitor - type 'help' for more information\n@@ -179,8 +176,7 @@ quit\n \n Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on\n QEMU X.Y.Z monitor - type 'help' for more information\n-(qemu) QEMU_PROG: Block node is read-only\n-QEMU_PROG: Initialization of device ide-hd failed: Device initialization failed.\n+(qemu) QEMU_PROG: Initialization of device ide-hd failed: Block node is read-only\n \n Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on\n QEMU X.Y.Z monitor - type 'help' for more information\n@@ -202,12 +198,10 @@ QEMU X.Y.Z monitor - type 'help' for more information\n Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-drive,drive=disk\n QEMU X.Y.Z monitor - type 'help' for more information\n (qemu) QEMU_PROG: -device ide-drive,drive=disk: Block node is read-only\n-QEMU_PROG: -device ide-drive,drive=disk: Device initialization failed.\n \n Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-hd,drive=disk\n QEMU X.Y.Z monitor - type 'help' for more information\n (qemu) QEMU_PROG: -device ide-hd,drive=disk: Block node is read-only\n-QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed.\n \n Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk\n QEMU X.Y.Z monitor - type 'help' for more information\n", "prefixes": [ "v3", "1/6" ] }