1. 18 6月, 2020 5 次提交
  2. 16 6月, 2020 5 次提交
    • J
      hw/net/imx_fec: Convert debug fprintf() to trace events · 8095508a
      Jean-Christophe Dubois 提交于
      Signed-off-by: NJean-Christophe Dubois <jcd@tribudubois.net>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Tested-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      [PMD: Fixed 32-bit format string using PRIx32/PRIx64]
      Signed-off-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      8095508a
    • E
      Implement configurable descriptor size in ftgmac100 · d7a64d00
      Erik Smit 提交于
      The hardware supports configurable descriptor sizes, configured in the DBLAC
      register.
      
      Most drivers use the default 4 word descriptor, which is currently hardcoded,
      but Aspeed SDK configures 8 words to store extra data.
      Signed-off-by: NErik Smit <erik.lucas.smit@gmail.com>
      Reviewed-by: NCédric Le Goater <clg@kaod.org>
      [PMM: removed unnecessary parens]
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      d7a64d00
    • M
      sysbus: Convert to sysbus_realize() etc. with Coccinelle · 3c6ef471
      Markus Armbruster 提交于
      Convert from qdev_realize(), qdev_realize_and_unref() with null @bus
      argument to sysbus_realize(), sysbus_realize_and_unref().
      
      Coccinelle script:
      
          @@
          expression dev, errp;
          @@
          -    qdev_realize(DEVICE(dev), NULL, errp);
          +    sysbus_realize(SYS_BUS_DEVICE(dev), errp);
      
          @@
          expression sysbus_dev, dev, errp;
          @@
          +    sysbus_dev = SYS_BUS_DEVICE(dev);
          -    qdev_realize_and_unref(dev, NULL, errp);
          +    sysbus_realize_and_unref(sysbus_dev, errp);
          -    sysbus_dev = SYS_BUS_DEVICE(dev);
      
          @@
          expression sysbus_dev, dev, errp;
          expression expr;
          @@
               sysbus_dev = SYS_BUS_DEVICE(dev);
               ... when != dev = expr;
          -    qdev_realize_and_unref(dev, NULL, errp);
          +    sysbus_realize_and_unref(sysbus_dev, errp);
      
          @@
          expression dev, errp;
          @@
          -    qdev_realize_and_unref(DEVICE(dev), NULL, errp);
          +    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp);
      
          @@
          expression dev, errp;
          @@
          -    qdev_realize_and_unref(dev, NULL, errp);
          +    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp);
      
      Whitespace changes minimized manually.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Acked-by: NAlistair Francis <alistair.francis@wdc.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <philmd@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200610053247.1583243-46-armbru@redhat.com>
      [Conflicts in hw/misc/empty_slot.c and hw/sparc/leon3.c resolved]
      3c6ef471
    • M
      qom: Less verbose object_initialize_child() · 9fc7fc4d
      Markus Armbruster 提交于
      All users of object_initialize_child() pass the obvious child size
      argument.  Almost all pass &error_abort and no properties.  Tiresome.
      
      Rename object_initialize_child() to
      object_initialize_child_with_props() to free the name.  New
      convenience wrapper object_initialize_child() automates the size
      argument, and passes &error_abort and no properties.
      
      Rename object_initialize_childv() to
      object_initialize_child_with_propsv() for consistency.
      
      Convert callers with this Coccinelle script:
      
          @@
          expression parent, propname, type;
          expression child, size;
          symbol error_abort;
          @@
          -    object_initialize_child(parent, propname, OBJECT(child), size, type, &error_abort, NULL)
          +    object_initialize_child(parent, propname, child, size, type, &error_abort, NULL)
      
          @@
          expression parent, propname, type;
          expression child;
          symbol error_abort;
          @@
          -    object_initialize_child(parent, propname, child, sizeof(*child), type, &error_abort, NULL)
          +    object_initialize_child(parent, propname, child, type)
      
          @@
          expression parent, propname, type;
          expression child;
          symbol error_abort;
          @@
          -    object_initialize_child(parent, propname, &child, sizeof(child), type, &error_abort, NULL)
          +    object_initialize_child(parent, propname, &child, type)
      
          @@
          expression parent, propname, type;
          expression child, size, err;
          expression list props;
          @@
          -    object_initialize_child(parent, propname, child, size, type, err, props)
          +    object_initialize_child_with_props(parent, propname, child, size, type, err, props)
      
      Note that Coccinelle chokes on ARMSSE typedef vs. macro in
      hw/arm/armsse.c.  Worked around by temporarily renaming the macro for
      the spatch run.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Acked-by: NAlistair Francis <alistair.francis@wdc.com>
      [Rebased: machine opentitan is new (commit fe0fe473)]
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200610053247.1583243-37-armbru@redhat.com>
      9fc7fc4d
    • M
      qdev: Convert uses of qdev_create() with Coccinelle · 3e80f690
      Markus Armbruster 提交于
      This is the transformation explained in the commit before previous.
      Takes care of just one pattern that needs conversion.  More to come in
      this series.
      
      Coccinelle script:
      
          @ depends on !(file in "hw/arm/highbank.c")@
          expression bus, type_name, dev, expr;
          @@
          -    dev = qdev_create(bus, type_name);
          +    dev = qdev_new(type_name);
               ... when != dev = expr
          -    qdev_init_nofail(dev);
          +    qdev_realize_and_unref(dev, bus, &error_fatal);
      
          @@
          expression bus, type_name, dev, expr;
          identifier DOWN;
          @@
          -    dev = DOWN(qdev_create(bus, type_name));
          +    dev = DOWN(qdev_new(type_name));
               ... when != dev = expr
          -    qdev_init_nofail(DEVICE(dev));
          +    qdev_realize_and_unref(DEVICE(dev), bus, &error_fatal);
      
          @@
          expression bus, type_name, expr;
          identifier dev;
          @@
          -    DeviceState *dev = qdev_create(bus, type_name);
          +    DeviceState *dev = qdev_new(type_name);
               ... when != dev = expr
          -    qdev_init_nofail(dev);
          +    qdev_realize_and_unref(dev, bus, &error_fatal);
      
          @@
          expression bus, type_name, dev, expr, errp;
          symbol true;
          @@
          -    dev = qdev_create(bus, type_name);
          +    dev = qdev_new(type_name);
               ... when != dev = expr
          -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
          +    qdev_realize_and_unref(dev, bus, errp);
      
          @@
          expression bus, type_name, expr, errp;
          identifier dev;
          symbol true;
          @@
          -    DeviceState *dev = qdev_create(bus, type_name);
          +    DeviceState *dev = qdev_new(type_name);
               ... when != dev = expr
          -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
          +    qdev_realize_and_unref(dev, bus, errp);
      
      The first rule exempts hw/arm/highbank.c, because it matches along two
      control flow paths there, with different @type_name.  Covered by the
      next commit's manual conversions.
      
      Missing #include "qapi/error.h" added manually.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200610053247.1583243-10-armbru@redhat.com>
      [Conflicts in hw/misc/empty_slot.c and hw/sparc/leon3.c resolved]
      3e80f690
  3. 30 5月, 2020 1 次提交
  4. 15 5月, 2020 6 次提交
    • P
      hw: Remove unnecessary DEVICE() cast · 8e5c952b
      Philippe Mathieu-Daudé 提交于
      The DEVICE() macro is defined as:
      
        #define DEVICE(obj) OBJECT_CHECK(DeviceState, (obj), TYPE_DEVICE)
      
      which expands to:
      
        ((DeviceState *)object_dynamic_cast_assert((Object *)(obj), (name),
                                                   __FILE__, __LINE__,
                                                   __func__))
      
      This assertion can only fail when @obj points to something other
      than its stated type, i.e. when we're in undefined behavior country.
      
      Remove the unnecessary DEVICE() casts when we already know the
      pointer is of DeviceState type.
      
      Patch created mechanically using spatch with this script:
      
        @@
        typedef DeviceState;
        DeviceState *s;
        @@
        -   DEVICE(s)
        +   s
      Acked-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Acked-by: NPaul Durrant <paul@xen.org>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NCédric Le Goater <clg@kaod.org>
      Acked-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NRichard Henderson <richard.henderson@linaro.org>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Message-Id: <20200512070020.22782-4-f4bug@amsat.org>
      8e5c952b
    • M
      qdev: Unrealize must not fail · b69c3c21
      Markus Armbruster 提交于
      Devices may have component devices and buses.
      
      Device realization may fail.  Realization is recursive: a device's
      realize() method realizes its components, and device_set_realized()
      realizes its buses (which should in turn realize the devices on that
      bus, except bus_set_realized() doesn't implement that, yet).
      
      When realization of a component or bus fails, we need to roll back:
      unrealize everything we realized so far.  If any of these unrealizes
      failed, the device would be left in an inconsistent state.  Must not
      happen.
      
      device_set_realized() lets it happen: it ignores errors in the roll
      back code starting at label child_realize_fail.
      
      Since realization is recursive, unrealization must be recursive, too.
      But how could a partly failed unrealize be rolled back?  We'd have to
      re-realize, which can fail.  This design is fundamentally broken.
      
      device_set_realized() does not roll back at all.  Instead, it keeps
      unrealizing, ignoring further errors.
      
      It can screw up even for a device with no buses: if the lone
      dc->unrealize() fails, it still unregisters vmstate, and calls
      listeners' unrealize() callback.
      
      bus_set_realized() does not roll back either.  Instead, it stops
      unrealizing.
      
      Fortunately, no unrealize method can fail, as we'll see below.
      
      To fix the design error, drop parameter @errp from all the unrealize
      methods.
      
      Any unrealize method that uses @errp now needs an update.  This leads
      us to unrealize() methods that can fail.  Merely passing it to another
      unrealize method cannot cause failure, though.  Here are the ones that
      do other things with @errp:
      
      * virtio_serial_device_unrealize()
      
        Fails when qbus_set_hotplug_handler() fails, but still does all the
        other work.  On failure, the device would stay realized with its
        resources completely gone.  Oops.  Can't happen, because
        qbus_set_hotplug_handler() can't actually fail here.  Pass
        &error_abort to qbus_set_hotplug_handler() instead.
      
      * hw/ppc/spapr_drc.c's unrealize()
      
        Fails when object_property_del() fails, but all the other work is
        already done.  On failure, the device would stay realized with its
        vmstate registration gone.  Oops.  Can't happen, because
        object_property_del() can't actually fail here.  Pass &error_abort
        to object_property_del() instead.
      
      * spapr_phb_unrealize()
      
        Fails and bails out when remove_drcs() fails, but other work is
        already done.  On failure, the device would stay realized with some
        of its resources gone.  Oops.  remove_drcs() fails only when
        chassis_from_bus()'s object_property_get_uint() fails, and it can't
        here.  Pass &error_abort to remove_drcs() instead.
      
      Therefore, no unrealize method can fail before this patch.
      
      device_set_realized()'s recursive unrealization via bus uses
      object_property_set_bool().  Can't drop @errp there, so pass
      &error_abort.
      
      We similarly unrealize with object_property_set_bool() elsewhere,
      always ignoring errors.  Pass &error_abort instead.
      
      Several unrealize methods no longer handle errors from other unrealize
      methods: virtio_9p_device_unrealize(),
      virtio_input_device_unrealize(), scsi_qdev_unrealize(), ...
      Much of the deleted error handling looks wrong anyway.
      
      One unrealize methods no longer ignore such errors:
      usb_ehci_pci_exit().
      
      Several realize methods no longer ignore errors when rolling back:
      v9fs_device_realize_common(), pci_qdev_unrealize(),
      spapr_phb_realize(), usb_qdev_realize(), vfio_ccw_realize(),
      virtio_device_realize().
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <philmd@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200505152926.18877-17-armbru@redhat.com>
      b69c3c21
    • M
      Drop more @errp parameters after previous commit · 40c2281c
      Markus Armbruster 提交于
      Several functions can't fail anymore: ich9_pm_add_properties(),
      device_add_bootindex_property(), ppc_compat_add_property(),
      spapr_caps_add_properties(), PropertyInfo.create().  Drop their @errp
      parameter.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200505152926.18877-16-armbru@redhat.com>
      40c2281c
    • M
      qom: Drop parameter @errp of object_property_add() & friends · d2623129
      Markus Armbruster 提交于
      The only way object_property_add() can fail is when a property with
      the same name already exists.  Since our property names are all
      hardcoded, failure is a programming error, and the appropriate way to
      handle it is passing &error_abort.
      
      Same for its variants, except for object_property_add_child(), which
      additionally fails when the child already has a parent.  Parentage is
      also under program control, so this is a programming error, too.
      
      We have a bit over 500 callers.  Almost half of them pass
      &error_abort, slightly fewer ignore errors, one test case handles
      errors, and the remaining few callers pass them to their own callers.
      
      The previous few commits demonstrated once again that ignoring
      programming errors is a bad idea.
      
      Of the few ones that pass on errors, several violate the Error API.
      The Error ** argument must be NULL, &error_abort, &error_fatal, or a
      pointer to a variable containing NULL.  Passing an argument of the
      latter kind twice without clearing it in between is wrong: if the
      first call sets an error, it no longer points to NULL for the second
      call.  ich9_pm_add_properties(), sparc32_ledma_realize(),
      sparc32_dma_realize(), xilinx_axidma_realize(), xilinx_enet_realize()
      are wrong that way.
      
      When the one appropriate choice of argument is &error_abort, letting
      users pick the argument is a bad idea.
      
      Drop parameter @errp and assert the preconditions instead.
      
      There's one exception to "duplicate property name is a programming
      error": the way object_property_add() implements the magic (and
      undocumented) "automatic arrayification".  Don't drop @errp there.
      Instead, rename object_property_add() to object_property_try_add(),
      and add the obvious wrapper object_property_add().
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200505152926.18877-15-armbru@redhat.com>
      [Two semantic rebase conflicts resolved]
      d2623129
    • M
      e1000: Don't run e1000_instance_init() twice · a13f2042
      Markus Armbruster 提交于
      QOM object initialization runs .instance_init() for the type and all
      its supertypes; see object_init_with_type().
      
      Both TYPE_E1000_BASE and its concrete subtypes set .instance_init() to
      e1000_instance_init().  For the concrete subtypes, it duly gets run
      twice.  The second run fails, but the error gets ignored (a later
      commit will change that).
      
      Remove it from the subtypes.
      
      Cc: Jason Wang <jasowang@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Acked-by: NJason Wang <jasowang@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200505152926.18877-12-armbru@redhat.com>
      a13f2042
    • M
      qom: Clean up inconsistent use of gchar * vs. char * · ddfb0baa
      Markus Armbruster 提交于
      Uses of gchar * in qom/object.h:
      
      * ObjectProperty member @name
      
        Functions that take a property name argument all use char *.  Change
        the member to match.
      
      * ObjectProperty member @type
      
        Functions that take a property type argument or return it all use
        char *.  Change the member to match.
      
      * ObjectProperty member @description
      
        Functions that take a property description argument all use char *.
        Change the member to match.
      
      * object_resolve_path_component() parameter @part
      
        Path components are property names.  Most callers pass char *
        arguments.  Change the parameter to match.  Adjust the few callers
        that pass gchar * to pass char *.
      
      * Return value of object_get_canonical_path_component(),
        object_get_canonical_path()
      
        Most callers convert their return values right back to char *.
        Change the return value to match.  Adjust the few callers where that
        would add a conversion to gchar * to use char * instead.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20200505152926.18877-3-armbru@redhat.com>
      ddfb0baa
  5. 14 5月, 2020 5 次提交
  6. 30 4月, 2020 3 次提交
  7. 29 4月, 2020 2 次提交
    • M
      virtio-net: Fix duplex=... and speed=... error handling · 843c4cfc
      Markus Armbruster 提交于
      virtio_net_device_realize() rejects invalid duplex and speed values.
      The error handling is broken:
      
          $ ../qemu/bld-sani/x86_64-softmmu/qemu-system-x86_64 -S -display none -monitor stdio
          QEMU 4.2.93 monitor - type 'help' for more information
          (qemu) device_add virtio-net,duplex=x
          Error: 'duplex' must be 'half' or 'full'
          (qemu) c
          =================================================================
          ==15654==ERROR: AddressSanitizer: heap-use-after-free on address 0x62e000014590 at pc 0x560b75c8dc13 bp 0x7fffdf1a6950 sp 0x7fffdf1a6940
          READ of size 8 at 0x62e000014590 thread T0
      	#0 0x560b75c8dc12 in object_dynamic_cast_assert /work/armbru/qemu/qom/object.c:826
      	#1 0x560b74c38ac0 in virtio_vmstate_change /work/armbru/qemu/hw/virtio/virtio.c:3210
      	#2 0x560b74d9765e in vm_state_notify /work/armbru/qemu/softmmu/vl.c:1271
      	#3 0x560b7494ba72 in vm_prepare_start /work/armbru/qemu/cpus.c:2156
      	#4 0x560b7494bacd in vm_start /work/armbru/qemu/cpus.c:2162
      	#5 0x560b75a7d890 in qmp_cont /work/armbru/qemu/monitor/qmp-cmds.c:160
      	#6 0x560b75a8d70a in hmp_cont /work/armbru/qemu/monitor/hmp-cmds.c:1043
      	#7 0x560b75a799f2 in handle_hmp_command /work/armbru/qemu/monitor/hmp.c:1082
          [...]
      
          0x62e000014590 is located 33168 bytes inside of 42288-byte region [0x62e00000c400,0x62e000016930)
          freed by thread T1 here:
      	#0 0x7feadd39491f in __interceptor_free (/lib64/libasan.so.5+0x10d91f)
      	#1 0x7feadcebcd7c in g_free (/lib64/libglib-2.0.so.0+0x55d7c)
      	#2 0x560b75c8fd40 in object_unref /work/armbru/qemu/qom/object.c:1128
      	#3 0x560b7498a625 in memory_region_unref /work/armbru/qemu/memory.c:1762
      	#4 0x560b74999fa4 in do_address_space_destroy /work/armbru/qemu/memory.c:2788
      	#5 0x560b762362fc in call_rcu_thread /work/armbru/qemu/util/rcu.c:283
      	#6 0x560b761c8884 in qemu_thread_start /work/armbru/qemu/util/qemu-thread-posix.c:519
      	#7 0x7fead9be34bf in start_thread (/lib64/libpthread.so.0+0x84bf)
      
          previously allocated by thread T0 here:
      	#0 0x7feadd394d18 in __interceptor_malloc (/lib64/libasan.so.5+0x10dd18)
      	#1 0x7feadcebcc88 in g_malloc (/lib64/libglib-2.0.so.0+0x55c88)
      	#2 0x560b75c8cf8a in object_new /work/armbru/qemu/qom/object.c:699
      	#3 0x560b75010ad9 in qdev_device_add /work/armbru/qemu/qdev-monitor.c:654
      	#4 0x560b750120c2 in qmp_device_add /work/armbru/qemu/qdev-monitor.c:805
      	#5 0x560b75012c1b in hmp_device_add /work/armbru/qemu/qdev-monitor.c:905
          [...]
          ==15654==ABORTING
      
      Cause: virtio_net_device_realize() neglects to bail out after setting
      the error.  Fix that.
      
      Fixes: 9473939e
      Cc: "Michael S. Tsirkin" <mst@redhat.com>
      Cc: Jason Wang <jasowang@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <philmd@redhat.com>
      Message-Id: <20200422130719.28225-9-armbru@redhat.com>
      Acked-by: NMichael S. Tsirkin <mst@redhat.com>
      843c4cfc
    • P
      various: Remove suspicious '\' character outside of #define in C code · 78ee6bd0
      Philippe Mathieu-Daudé 提交于
      Fixes the following coccinelle warnings:
      
        $ spatch --sp-file --verbose-parsing  ... \
            scripts/coccinelle/remove_local_err.cocci
        ...
        SUSPICIOUS: a \ character appears outside of a #define at ./target/ppc/translate_init.inc.c:5213
        SUSPICIOUS: a \ character appears outside of a #define at ./target/ppc/translate_init.inc.c:5261
        SUSPICIOUS: a \ character appears outside of a #define at ./target/microblaze/cpu.c:166
        SUSPICIOUS: a \ character appears outside of a #define at ./target/microblaze/cpu.c:167
        SUSPICIOUS: a \ character appears outside of a #define at ./target/microblaze/cpu.c:169
        SUSPICIOUS: a \ character appears outside of a #define at ./target/microblaze/cpu.c:170
        SUSPICIOUS: a \ character appears outside of a #define at ./target/microblaze/cpu.c:171
        SUSPICIOUS: a \ character appears outside of a #define at ./target/microblaze/cpu.c:172
        SUSPICIOUS: a \ character appears outside of a #define at ./target/microblaze/cpu.c:173
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5787
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5789
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5800
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5801
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5802
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5804
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5805
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:5806
        SUSPICIOUS: a \ character appears outside of a #define at ./target/i386/cpu.c:6329
        SUSPICIOUS: a \ character appears outside of a #define at ./hw/sd/sdhci.c:1133
        SUSPICIOUS: a \ character appears outside of a #define at ./hw/scsi/scsi-disk.c:3081
        SUSPICIOUS: a \ character appears outside of a #define at ./hw/net/virtio-net.c:1529
        SUSPICIOUS: a \ character appears outside of a #define at ./hw/riscv/sifive_u.c:468
        SUSPICIOUS: a \ character appears outside of a #define at ./dump/dump.c:1895
        SUSPICIOUS: a \ character appears outside of a #define at ./block/vhdx.c:2209
        SUSPICIOUS: a \ character appears outside of a #define at ./block/vhdx.c:2215
        SUSPICIOUS: a \ character appears outside of a #define at ./block/vhdx.c:2221
        SUSPICIOUS: a \ character appears outside of a #define at ./block/vhdx.c:2222
        SUSPICIOUS: a \ character appears outside of a #define at ./block/replication.c:172
        SUSPICIOUS: a \ character appears outside of a #define at ./block/replication.c:173
      Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Signed-off-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Message-Id: <20200412223619.11284-2-f4bug@amsat.org>
      Reviewed-by: NAlistair Francis <alistair.francis@wdc.com>
      Acked-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      78ee6bd0
  8. 28 4月, 2020 1 次提交
  9. 31 3月, 2020 11 次提交
  10. 17 3月, 2020 1 次提交