get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/808932/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 808932,
    "url": "http://patchwork.ozlabs.org/api/patches/808932/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901180340.30009-25-eblake@redhat.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": "<20170901180340.30009-25-eblake@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-01T18:03:35",
    "name": "[v6,24/29] bios-tables-test: Drop dependence on global_qtest",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "8f2bd14a1e9a35d14ceceed5ef54fc13aec8ad55",
    "submitter": {
        "id": 6591,
        "url": "http://patchwork.ozlabs.org/api/people/6591/?format=api",
        "name": "Eric Blake",
        "email": "eblake@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901180340.30009-25-eblake@redhat.com/mbox/",
    "series": [
        {
            "id": 1089,
            "url": "http://patchwork.ozlabs.org/api/series/1089/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1089",
            "date": "2017-09-01T18:03:12",
            "name": "Preliminary libqtest cleanups",
            "version": 6,
            "mbox": "http://patchwork.ozlabs.org/series/1089/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/808932/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/808932/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>)",
            "ext-mx08.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx08.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=eblake@redhat.com"
        ],
        "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 3xkSGt3LsKz9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat,  2 Sep 2017 04:20:54 +1000 (AEST)",
            "from localhost ([::1]:53334 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 1dnqYm-0006hg-Gf\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 14:20:52 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:56282)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnqIv-0007Y2-HV\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:04:35 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnqIq-00021d-Az\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:04:29 -0400",
            "from mx1.redhat.com ([209.132.183.28]:33318)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <eblake@redhat.com>) id 1dnqIq-000200-2k\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:04:24 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 28491C056819\n\tfor <qemu-devel@nongnu.org>; Fri,  1 Sep 2017 18:04:23 +0000 (UTC)",
            "from red.redhat.com (ovpn-121-149.rdu2.redhat.com [10.10.121.149])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 48768627DE;\n\tFri,  1 Sep 2017 18:04:22 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 28491C056819",
        "From": "Eric Blake <eblake@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Fri,  1 Sep 2017 13:03:35 -0500",
        "Message-Id": "<20170901180340.30009-25-eblake@redhat.com>",
        "In-Reply-To": "<20170901180340.30009-1-eblake@redhat.com>",
        "References": "<20170901180340.30009-1-eblake@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.15",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.32]);\n\tFri, 01 Sep 2017 18:04:23 +0000 (UTC)",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [PATCH v6 24/29] bios-tables-test: Drop dependence on\n\tglobal_qtest",
        "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": "pbonzini@redhat.com, Igor Mammedov <imammedo@redhat.com>,\n\tarmbru@redhat.com, \"Michael S. Tsirkin\" <mst@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": "As a general rule, we prefer avoiding implicit global state\nbecause it makes code harder to safely copy and paste without\nthinking about the global state.  Although bios-tables-test does\nnot maintain parallel qtest connections, it's just as easy to be\nexplicit about the state; once all tests have been cleaned up, a\nlater patch can then get rid of global_qtest and a layer of\nwrappers in libqtest.\n\nSigned-off-by: Eric Blake <eblake@redhat.com>\n---\n tests/bios-tables-test.c | 78 +++++++++++++++++++++++++-----------------------\n 1 file changed, 40 insertions(+), 38 deletions(-)",
    "diff": "diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c\nindex 75b29df493..976792f2c5 100644\n--- a/tests/bios-tables-test.c\n+++ b/tests/bios-tables-test.c\n@@ -38,6 +38,7 @@ typedef struct {\n     struct smbios_21_entry_point smbios_ep_table;\n     uint8_t *required_struct_types;\n     int required_struct_types_len;\n+    QTestState *qts;\n } test_data;\n\n static char disk[] = \"tests/acpi-test-disk-XXXXXX\";\n@@ -77,7 +78,7 @@ static void free_test_data(test_data *data)\n\n static void test_acpi_rsdp_address(test_data *data)\n {\n-    uint32_t off = acpi_find_rsdp_address(global_qtest);\n+    uint32_t off = acpi_find_rsdp_address(data->qts);\n     g_assert_cmphex(off, <, 0x100000);\n     data->rsdp_addr = off;\n }\n@@ -87,7 +88,7 @@ static void test_acpi_rsdp_table(test_data *data)\n     AcpiRsdpDescriptor *rsdp_table = &data->rsdp_table;\n     uint32_t addr = data->rsdp_addr;\n\n-    acpi_parse_rsdp_table(global_qtest, addr, rsdp_table);\n+    acpi_parse_rsdp_table(data->qts, addr, rsdp_table);\n\n     /* rsdp checksum is not for the whole table, but for the first 20 bytes */\n     g_assert(!acpi_calc_checksum((uint8_t *)rsdp_table, 20));\n@@ -102,7 +103,7 @@ static void test_acpi_rsdt_table(test_data *data)\n     uint8_t checksum;\n\n     /* read the header */\n-    ACPI_READ_TABLE_HEADER(global_qtest, rsdt_table, addr);\n+    ACPI_READ_TABLE_HEADER(data->qts, rsdt_table, addr);\n     ACPI_ASSERT_CMP(rsdt_table->signature, \"RSDT\");\n\n     /* compute the table entries in rsdt */\n@@ -112,7 +113,7 @@ static void test_acpi_rsdt_table(test_data *data)\n\n     /* get the addresses of the tables pointed by rsdt */\n     tables = g_new0(uint32_t, tables_nr);\n-    ACPI_READ_ARRAY_PTR(global_qtest, tables, tables_nr, addr);\n+    ACPI_READ_ARRAY_PTR(data->qts, tables, tables_nr, addr);\n\n     checksum = acpi_calc_checksum((uint8_t *)rsdt_table, rsdt_table->length) +\n                acpi_calc_checksum((uint8_t *)tables,\n@@ -128,7 +129,7 @@ static void test_acpi_fadt_table(test_data *data)\n {\n     AcpiFadtDescriptorRev3 *fadt_table = &data->fadt_table;\n     uint32_t addr;\n-    QTestState *qts = global_qtest;\n+    QTestState *qts = data->qts;\n\n     /* FADT table comes first */\n     addr = data->rsdt_tables_addr[0];\n@@ -196,26 +197,27 @@ static void test_acpi_facs_table(test_data *data)\n     AcpiFacsDescriptorRev1 *facs_table = &data->facs_table;\n     uint32_t addr = data->fadt_table.firmware_ctrl;\n\n-    ACPI_READ_FIELD(global_qtest, facs_table->signature, addr);\n-    ACPI_READ_FIELD(global_qtest, facs_table->length, addr);\n-    ACPI_READ_FIELD(global_qtest, facs_table->hardware_signature, addr);\n-    ACPI_READ_FIELD(global_qtest, facs_table->firmware_waking_vector, addr);\n-    ACPI_READ_FIELD(global_qtest, facs_table->global_lock, addr);\n-    ACPI_READ_FIELD(global_qtest, facs_table->flags, addr);\n-    ACPI_READ_ARRAY(global_qtest, facs_table->resverved3, addr);\n+    ACPI_READ_FIELD(data->qts, facs_table->signature, addr);\n+    ACPI_READ_FIELD(data->qts, facs_table->length, addr);\n+    ACPI_READ_FIELD(data->qts, facs_table->hardware_signature, addr);\n+    ACPI_READ_FIELD(data->qts, facs_table->firmware_waking_vector, addr);\n+    ACPI_READ_FIELD(data->qts, facs_table->global_lock, addr);\n+    ACPI_READ_FIELD(data->qts, facs_table->flags, addr);\n+    ACPI_READ_ARRAY(data->qts, facs_table->resverved3, addr);\n\n     ACPI_ASSERT_CMP(facs_table->signature, \"FACS\");\n }\n\n-static void test_dst_table(AcpiSdtTable *sdt_table, uint32_t addr)\n+static void test_dst_table(test_data *data, AcpiSdtTable *sdt_table,\n+                           uint32_t addr)\n {\n     uint8_t checksum;\n\n-    ACPI_READ_TABLE_HEADER(global_qtest, &sdt_table->header, addr);\n+    ACPI_READ_TABLE_HEADER(data->qts, &sdt_table->header, addr);\n\n     sdt_table->aml_len = sdt_table->header.length - sizeof(AcpiTableHeader);\n     sdt_table->aml = g_malloc0(sdt_table->aml_len);\n-    ACPI_READ_ARRAY_PTR(global_qtest, sdt_table->aml, sdt_table->aml_len, addr);\n+    ACPI_READ_ARRAY_PTR(data->qts, sdt_table->aml, sdt_table->aml_len, addr);\n\n     checksum = acpi_calc_checksum((uint8_t *)sdt_table,\n                                   sizeof(AcpiTableHeader)) +\n@@ -232,7 +234,7 @@ static void test_acpi_dsdt_table(test_data *data)\n     memset(&dsdt_table, 0, sizeof(dsdt_table));\n     data->tables = g_array_new(false, true, sizeof(AcpiSdtTable));\n\n-    test_dst_table(&dsdt_table, addr);\n+    test_dst_table(data, &dsdt_table, addr);\n     ACPI_ASSERT_CMP(dsdt_table.header.signature, \"DSDT\");\n\n     /* Place DSDT first */\n@@ -249,7 +251,7 @@ static void test_acpi_tables(test_data *data)\n\n         memset(&ssdt_table, 0, sizeof(ssdt_table));\n         uint32_t addr = data->rsdt_tables_addr[i + 1]; /* fadt is first */\n-        test_dst_table(&ssdt_table, addr);\n+        test_dst_table(data, &ssdt_table, addr);\n         g_array_append_val(data->tables, ssdt_table);\n     }\n }\n@@ -493,32 +495,32 @@ static bool smbios_ep_table_ok(test_data *data)\n     struct smbios_21_entry_point *ep_table = &data->smbios_ep_table;\n     uint32_t addr = data->smbios_ep_addr;\n\n-    ACPI_READ_ARRAY(global_qtest, ep_table->anchor_string, addr);\n+    ACPI_READ_ARRAY(data->qts, ep_table->anchor_string, addr);\n     if (memcmp(ep_table->anchor_string, \"_SM_\", 4)) {\n         return false;\n     }\n-    ACPI_READ_FIELD(global_qtest, ep_table->checksum, addr);\n-    ACPI_READ_FIELD(global_qtest, ep_table->length, addr);\n-    ACPI_READ_FIELD(global_qtest, ep_table->smbios_major_version, addr);\n-    ACPI_READ_FIELD(global_qtest, ep_table->smbios_minor_version, addr);\n-    ACPI_READ_FIELD(global_qtest, ep_table->max_structure_size, addr);\n-    ACPI_READ_FIELD(global_qtest, ep_table->entry_point_revision, addr);\n-    ACPI_READ_ARRAY(global_qtest, ep_table->formatted_area, addr);\n-    ACPI_READ_ARRAY(global_qtest, ep_table->intermediate_anchor_string, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->checksum, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->length, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->smbios_major_version, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->smbios_minor_version, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->max_structure_size, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->entry_point_revision, addr);\n+    ACPI_READ_ARRAY(data->qts, ep_table->formatted_area, addr);\n+    ACPI_READ_ARRAY(data->qts, ep_table->intermediate_anchor_string, addr);\n     if (memcmp(ep_table->intermediate_anchor_string, \"_DMI_\", 5)) {\n         return false;\n     }\n-    ACPI_READ_FIELD(global_qtest, ep_table->intermediate_checksum, addr);\n-    ACPI_READ_FIELD(global_qtest, ep_table->structure_table_length, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->intermediate_checksum, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->structure_table_length, addr);\n     if (ep_table->structure_table_length == 0) {\n         return false;\n     }\n-    ACPI_READ_FIELD(global_qtest, ep_table->structure_table_address, addr);\n-    ACPI_READ_FIELD(global_qtest, ep_table->number_of_structures, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->structure_table_address, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->number_of_structures, addr);\n     if (ep_table->number_of_structures == 0) {\n         return false;\n     }\n-    ACPI_READ_FIELD(global_qtest, ep_table->smbios_bcd_revision, addr);\n+    ACPI_READ_FIELD(data->qts, ep_table->smbios_bcd_revision, addr);\n     if (acpi_calc_checksum((uint8_t *)ep_table, sizeof *ep_table) ||\n         acpi_calc_checksum((uint8_t *)ep_table + 0x10,\n                            sizeof *ep_table - 0x10)) {\n@@ -537,7 +539,7 @@ static void test_smbios_entry_point(test_data *data)\n         int i;\n\n         for (i = 0; i < sizeof sig - 1; ++i) {\n-            sig[i] = readb(off + i);\n+            sig[i] = qtest_readb(data->qts, off + i);\n         }\n\n         if (!memcmp(sig, \"_SM_\", sizeof sig)) {\n@@ -580,9 +582,9 @@ static void test_smbios_structs(test_data *data)\n     for (i = 0; i < ep_table->number_of_structures; i++) {\n\n         /* grab type and formatted area length from struct header */\n-        type = readb(addr);\n+        type = qtest_readb(data->qts, addr);\n         g_assert_cmpuint(type, <=, SMBIOS_MAX_TYPE);\n-        len = readb(addr + 1);\n+        len = qtest_readb(data->qts, addr + 1);\n\n         /* single-instance structs must not have been encountered before */\n         if (smbios_single_instance(type)) {\n@@ -594,7 +596,7 @@ static void test_smbios_structs(test_data *data)\n         prv = crt = 1;\n         while (prv || crt) {\n             prv = crt;\n-            crt = readb(addr + len);\n+            crt = qtest_readb(data->qts, addr + len);\n             len++;\n         }\n\n@@ -631,9 +633,9 @@ static void test_acpi_one(const char *params, test_data *data)\n                            data->machine, \"kvm:tcg\",\n                            params ? params : \"\", disk);\n\n-    qtest_start(args);\n+    data->qts = qtest_init(args);\n\n-    boot_sector_test(global_qtest);\n+    boot_sector_test(data->qts);\n\n     test_acpi_rsdp_address(data);\n     test_acpi_rsdp_table(data);\n@@ -654,7 +656,7 @@ static void test_acpi_one(const char *params, test_data *data)\n     test_smbios_entry_point(data);\n     test_smbios_structs(data);\n\n-    qtest_quit(global_qtest);\n+    qtest_quit(data->qts);\n     g_free(args);\n }\n\n",
    "prefixes": [
        "v6",
        "24/29"
    ]
}