1. 25 9月, 2018 40 次提交
    • F
      job: Fix nested aio_poll() hanging in job_txn_apply · 49880165
      Fam Zheng 提交于
      All callers have acquired ctx already. Doing that again results in
      aio_poll() hang. This fixes the problem that a BDRV_POLL_WHILE() in the
      callback cannot make progress because ctx is recursively locked, for
      example, when drive-backup finishes.
      
      There are two callers of job_finalize():
      
          fam@lemon:~/work/qemu [master]$ git grep -w -A1 '^\s*job_finalize'
          blockdev.c:    job_finalize(&job->job, errp);
          blockdev.c-    aio_context_release(aio_context);
          --
          job-qmp.c:    job_finalize(job, errp);
          job-qmp.c-    aio_context_release(aio_context);
          --
          tests/test-blockjob.c:    job_finalize(&job->job, &error_abort);
          tests/test-blockjob.c-    assert(job->job.status == JOB_STATUS_CONCLUDED);
      
      Ignoring the test, it's easy to see both callers to job_finalize (and
      job_do_finalize) have acquired the context.
      
      Cc: qemu-stable@nongnu.org
      Reported-by: NGu Nini <ngu@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      49880165
    • S
      util/async: use qemu_aio_coroutine_enter in co_schedule_bh_cb · 6808ae04
      Sergio Lopez 提交于
      AIO Coroutines shouldn't by managed by an AioContext different than the
      one assigned when they are created. aio_co_enter avoids entering a
      coroutine from a different AioContext, calling aio_co_schedule instead.
      
      Scheduled coroutines are then entered by co_schedule_bh_cb using
      qemu_coroutine_enter, which just calls qemu_aio_coroutine_enter with the
      current AioContext obtained with qemu_get_current_aio_context.
      Eventually, co->ctx will be set to the AioContext passed as an argument
      to qemu_aio_coroutine_enter.
      
      This means that, if an IO Thread's AioConext is being processed by the
      Main Thread (due to aio_poll being called with a BDS AioContext, as it
      happens in AIO_WAIT_WHILE among other places), the AioContext from some
      coroutines may be wrongly replaced with the one from the Main Thread.
      
      This is the root cause behind some crashes, mainly triggered by the
      drain code at block/io.c. The most common are these abort and failed
      assertion:
      
      util/async.c:aio_co_schedule
      456     if (scheduled) {
      457         fprintf(stderr,
      458                 "%s: Co-routine was already scheduled in '%s'\n",
      459                 __func__, scheduled);
      460         abort();
      461     }
      
      util/qemu-coroutine-lock.c:
      286     assert(mutex->holder == self);
      
      But it's also known to cause random errors at different locations, and
      even SIGSEGV with broken coroutine backtraces.
      
      By using qemu_aio_coroutine_enter directly in co_schedule_bh_cb, we can
      pass the correct AioContext as an argument, making sure co->ctx is not
      wrongly altered.
      Signed-off-by: NSergio Lopez <slp@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      6808ae04
    • A
      qemu-iotests: Test snapshot=on with nonexistent TMPDIR · 6a7014ef
      Alberto Garcia 提交于
      We just fixed a bug that was causing a use-after-free when QEMU was
      unable to create a temporary snapshot. This is a test case for this
      scenario.
      Signed-off-by: NAlberto Garcia <berto@igalia.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      6a7014ef
    • A
      block: Fix use after free error in bdrv_open_inherit() · 8961be33
      Alberto Garcia 提交于
      When a block device is opened with BDRV_O_SNAPSHOT and the
      bdrv_append_temp_snapshot() call fails then the error code path tries
      to unref the already destroyed 'options' QDict.
      
      This can be reproduced easily by setting TMPDIR to a location where
      the QEMU process can't write:
      
         $ TMPDIR=/nonexistent $QEMU -drive driver=null-co,snapshot=on
      Signed-off-by: NAlberto Garcia <berto@igalia.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      8961be33
    • S
      block/linux-aio: acquire AioContext before qemu_laio_process_completions · e091f0e9
      Sergio Lopez 提交于
      In qemu_laio_process_completions_and_submit, the AioContext is acquired
      before the ioq_submit iteration and after qemu_laio_process_completions,
      but the latter is not thread safe either.
      
      This change avoids a number of random crashes when the Main Thread and
      an IO Thread collide processing completions for the same AioContext.
      This is an example of such crash:
      
       - The IO Thread is trying to acquire the AioContext at aio_co_enter,
         which evidences that it didn't lock it before:
      
      Thread 3 (Thread 0x7fdfd8bd8700 (LWP 36743)):
       #0  0x00007fdfe0dd542d in __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
       #1  0x00007fdfe0dd0de6 in _L_lock_870 () at /lib64/libpthread.so.0
       #2  0x00007fdfe0dd0cdf in __GI___pthread_mutex_lock (mutex=mutex@entry=0x5631fde0e6c0)
          at ../nptl/pthread_mutex_lock.c:114
       #3  0x00005631fc0603a7 in qemu_mutex_lock_impl (mutex=0x5631fde0e6c0, file=0x5631fc23520f "util/async.c", line=511) at util/qemu-thread-posix.c:66
       #4  0x00005631fc05b558 in aio_co_enter (ctx=0x5631fde0e660, co=0x7fdfcc0c2b40) at util/async.c:493
       #5  0x00005631fc05b5ac in aio_co_wake (co=<optimized out>) at util/async.c:478
       #6  0x00005631fbfc51ad in qemu_laio_process_completion (laiocb=<optimized out>) at block/linux-aio.c:104
       #7  0x00005631fbfc523c in qemu_laio_process_completions (s=s@entry=0x7fdfc0297670)
          at block/linux-aio.c:222
       #8  0x00005631fbfc5499 in qemu_laio_process_completions_and_submit (s=0x7fdfc0297670)
          at block/linux-aio.c:237
       #9  0x00005631fc05d978 in aio_dispatch_handlers (ctx=ctx@entry=0x5631fde0e660) at util/aio-posix.c:406
       #10 0x00005631fc05e3ea in aio_poll (ctx=0x5631fde0e660, blocking=blocking@entry=true)
          at util/aio-posix.c:693
       #11 0x00005631fbd7ad96 in iothread_run (opaque=0x5631fde0e1c0) at iothread.c:64
       #12 0x00007fdfe0dcee25 in start_thread (arg=0x7fdfd8bd8700) at pthread_create.c:308
       #13 0x00007fdfe0afc34d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113
      
       - The Main Thread is also processing completions from the same
         AioContext, and crashes due to failed assertion at util/iov.c:78:
      
      Thread 1 (Thread 0x7fdfeb5eac80 (LWP 36740)):
       #0  0x00007fdfe0a391f7 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
       #1  0x00007fdfe0a3a8e8 in __GI_abort () at abort.c:90
       #2  0x00007fdfe0a32266 in __assert_fail_base (fmt=0x7fdfe0b84e68 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x5631fc238ccb "offset == 0", file=file@entry=0x5631fc23698e "util/iov.c", line=line@entry=78, function=function@entry=0x5631fc236adc <__PRETTY_FUNCTION__.15220> "iov_memset")
          at assert.c:92
       #3  0x00007fdfe0a32312 in __GI___assert_fail (assertion=assertion@entry=0x5631fc238ccb "offset == 0", file=file@entry=0x5631fc23698e "util/iov.c", line=line@entry=78, function=function@entry=0x5631fc236adc <__PRETTY_FUNCTION__.15220> "iov_memset") at assert.c:101
       #4  0x00005631fc065287 in iov_memset (iov=<optimized out>, iov_cnt=<optimized out>, offset=<optimized out>, offset@entry=65536, fillc=fillc@entry=0, bytes=15515191315812405248) at util/iov.c:78
       #5  0x00005631fc065a63 in qemu_iovec_memset (qiov=<optimized out>, offset=offset@entry=65536, fillc=fillc@entry=0, bytes=<optimized out>) at util/iov.c:410
       #6  0x00005631fbfc5178 in qemu_laio_process_completion (laiocb=0x7fdd920df630) at block/linux-aio.c:88
       #7  0x00005631fbfc523c in qemu_laio_process_completions (s=s@entry=0x7fdfc0297670)
          at block/linux-aio.c:222
       #8  0x00005631fbfc5499 in qemu_laio_process_completions_and_submit (s=0x7fdfc0297670)
          at block/linux-aio.c:237
       #9  0x00005631fbfc54ed in qemu_laio_poll_cb (opaque=<optimized out>) at block/linux-aio.c:272
       #10 0x00005631fc05d85e in run_poll_handlers_once (ctx=ctx@entry=0x5631fde0e660) at util/aio-posix.c:497
       #11 0x00005631fc05e2ca in aio_poll (blocking=false, ctx=0x5631fde0e660) at util/aio-posix.c:574
       #12 0x00005631fc05e2ca in aio_poll (ctx=0x5631fde0e660, blocking=blocking@entry=false)
          at util/aio-posix.c:604
       #13 0x00005631fbfcb8a3 in bdrv_do_drained_begin (ignore_parent=<optimized out>, recursive=<optimized out>, bs=<optimized out>) at block/io.c:273
       #14 0x00005631fbfcb8a3 in bdrv_do_drained_begin (bs=0x5631fe8b6200, recursive=<optimized out>, parent=0x0, ignore_bds_parents=<optimized out>, poll=<optimized out>) at block/io.c:390
       #15 0x00005631fbfbcd2e in blk_drain (blk=0x5631fe83ac80) at block/block-backend.c:1590
       #16 0x00005631fbfbe138 in blk_remove_bs (blk=blk@entry=0x5631fe83ac80) at block/block-backend.c:774
       #17 0x00005631fbfbe3d6 in blk_unref (blk=0x5631fe83ac80) at block/block-backend.c:401
       #18 0x00005631fbfbe3d6 in blk_unref (blk=0x5631fe83ac80) at block/block-backend.c:449
       #19 0x00005631fbfc9a69 in commit_complete (job=0x5631fe8b94b0, opaque=0x7fdfcc1bb080)
          at block/commit.c:92
       #20 0x00005631fbf7d662 in job_defer_to_main_loop_bh (opaque=0x7fdfcc1b4560) at job.c:973
       #21 0x00005631fc05ad41 in aio_bh_poll (bh=0x7fdfcc01ad90) at util/async.c:90
       #22 0x00005631fc05ad41 in aio_bh_poll (ctx=ctx@entry=0x5631fddffdb0) at util/async.c:118
       #23 0x00005631fc05e210 in aio_dispatch (ctx=0x5631fddffdb0) at util/aio-posix.c:436
       #24 0x00005631fc05ac1e in aio_ctx_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>) at util/async.c:261
       #25 0x00007fdfeaae44c9 in g_main_context_dispatch (context=0x5631fde00140) at gmain.c:3201
       #26 0x00007fdfeaae44c9 in g_main_context_dispatch (context=context@entry=0x5631fde00140) at gmain.c:3854
       #27 0x00005631fc05d503 in main_loop_wait () at util/main-loop.c:215
       #28 0x00005631fc05d503 in main_loop_wait (timeout=<optimized out>) at util/main-loop.c:238
       #29 0x00005631fc05d503 in main_loop_wait (nonblocking=nonblocking@entry=0) at util/main-loop.c:497
       #30 0x00005631fbd81412 in main_loop () at vl.c:1866
       #31 0x00005631fbc18ff3 in main (argc=<optimized out>, argv=<optimized out>, envp=<optimized out>)
          at vl.c:4647
      
       - A closer examination shows that s->io_q.in_flight appears to have
         gone backwards:
      
      (gdb) frame 7
       #7  0x00005631fbfc523c in qemu_laio_process_completions (s=s@entry=0x7fdfc0297670)
          at block/linux-aio.c:222
      222	            qemu_laio_process_completion(laiocb);
      (gdb) p s
      $2 = (LinuxAioState *) 0x7fdfc0297670
      (gdb) p *s
      $3 = {aio_context = 0x5631fde0e660, ctx = 0x7fdfeb43b000, e = {rfd = 33, wfd = 33}, io_q = {plugged = 0,
          in_queue = 0, in_flight = 4294967280, blocked = false, pending = {sqh_first = 0x0,
            sqh_last = 0x7fdfc0297698}}, completion_bh = 0x7fdfc0280ef0, event_idx = 21, event_max = 241}
      (gdb) p/x s->io_q.in_flight
      $4 = 0xfffffff0
      Signed-off-by: NSergio Lopez <slp@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      e091f0e9
    • K
      qemu-iotests: Test commit with top-node/base-node · d57177a4
      Kevin Wolf 提交于
      This adds some tests for block-commit with the new options top-node and
      base-node (taking node names) instead of top and base (taking file
      names).
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      d57177a4
    • K
      commit: Add top-node/base-node options · 3c605f40
      Kevin Wolf 提交于
      The block-commit QMP command required specifying the top and base nodes
      of the commit jobs using the file name of that node. While this works
      in simple cases (local files with absolute paths), the file names
      generated for more complicated setups can be hard to predict.
      
      The block-commit command has more problems than just this, so we want to
      replace it altogether in the long run, but libvirt needs a reliable way
      to address nodes now. So we don't want to wait for a new, cleaner
      command, but just add the minimal thing needed right now.
      
      This adds two new options top-node and base-node to the command, which
      allow specifying node names instead. They are mutually exclusive with
      the old options.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      3c605f40
    • J
      blockdev: document transactional shortcomings · 66da04dd
      John Snow 提交于
      Presently only the backup job really guarantees what one would consider
      transactional semantics. To guard against someone helpfully adding them
      in the future, document that there are shortcomings in the model that
      would need to be audited at that time.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 20180906130225.5118-17-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      66da04dd
    • J
      block/backup: qapi documentation fixup · dfaff2c3
      John Snow 提交于
      Fix documentation to match the other jobs amended for 3.1.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-16-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      dfaff2c3
    • J
      qapi/block-stream: expose new job properties · 241ca1ab
      John Snow 提交于
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-15-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      241ca1ab
    • J
      qapi/block-mirror: expose new job properties · a6b58ade
      John Snow 提交于
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-14-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      a6b58ade
    • J
      qapi/block-commit: expose new job properties · 96fbf534
      John Snow 提交于
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-13-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      96fbf534
    • J
      jobs: remove .exit callback · ccbfb331
      John Snow 提交于
      Now that all of the jobs use the component finalization callbacks,
      there's no use for the heavy-hammer .exit callback anymore.
      
      job_exit becomes a glorified type shim so that we can call
      job_completed from aio_bh_schedule_oneshot.
      
      Move these three functions down into job.c to eliminate a
      forward reference.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-12-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      ccbfb331
    • J
      tests/test-blockjob-txn: move .exit to .clean · e4dad427
      John Snow 提交于
      The exit callback in this test actually only performs cleanup.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-11-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      e4dad427
    • J
      tests/test-blockjob: remove exit callback · 977d26fd
      John Snow 提交于
      We remove the exit callback and the completed boolean along with it.
      We can simulate it just fine by waiting for the job to defer to the
      main loop, and then giving it one final kick to get the main loop
      portion to run.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-10-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      977d26fd
    • J
      tests/blockjob: replace Blockjob with Job · 0cc4643b
      John Snow 提交于
      These tests don't actually test blockjobs anymore, they test
      generic Job lifetimes. Change the types accordingly.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-9-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      0cc4643b
    • J
      block/stream: refactor stream to use job callbacks · 1b57488a
      John Snow 提交于
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-8-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      1b57488a
    • J
      block/mirror: conservative mirror_exit refactor · 737efc1e
      John Snow 提交于
      For purposes of minimum code movement, refactor the mirror_exit
      callback to use the post-finalization callbacks in a trivial way.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 20180906130225.5118-7-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      [mreitz: Added comment for the mirror_exit() function]
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      737efc1e
    • J
      block/mirror: don't install backing chain on abort · c2924cea
      John Snow 提交于
      In cases where we abort the block/mirror job, there's no point in
      installing the new backing chain before we finish aborting.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 20180906130225.5118-6-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      c2924cea
    • J
      block/commit: refactor commit to use job callbacks · 22dffcbe
      John Snow 提交于
      Use the component callbacks; prepare, abort, and clean.
      
      NB: prepare is only called when the job has not yet failed;
      and abort can be called after prepare.
      
      complete -> prepare -> abort -> clean
      complete -> abort -> clean
      
      During refactor, a potential problem with bdrv_drop_intermediate
      was identified, the patched behavior is no worse than the pre-patch
      behavior, so leave a FIXME for now to be fixed in a future patch.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20180906130225.5118-5-jsnow@redhat.com
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      22dffcbe
    • J
      block/stream: add block job creation flags · cf6320df
      John Snow 提交于
      Add support for taking and passing forward job creation flags.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Message-id: 20180906130225.5118-4-jsnow@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      cf6320df
    • J
      block/mirror: add block job creation flags · a1999b33
      John Snow 提交于
      Add support for taking and passing forward job creation flags.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Message-id: 20180906130225.5118-3-jsnow@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      a1999b33
    • J
      block/commit: add block job creation flags · 5360782d
      John Snow 提交于
      Add support for taking and passing forward job creation flags.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Message-id: 20180906130225.5118-2-jsnow@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      5360782d
    • P
      Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-3.1-20180925' into staging · 506e4a00
      Peter Maydell 提交于
      ppc patch queue 2018-09-25
      
      Here are the accumulated ppc target patches for the last several
      weeks. Highlights are:
         * A number of 40p / PReP cleanups
         * Preliminary irq rework on the pseries machine towards the new
           XIVE interrupt controller
      
      There are a few patches which make small changes to generic device and
      arm code as prerequisites to the 40p interrupt routing cleanup.  They
      have acks from the relevant maintainers.
      
      # gpg: Signature made Tue 25 Sep 2018 08:00:06 BST
      # gpg:                using RSA key 6C38CACA20D9B392
      # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
      # gpg:                 aka "David Gibson (Red Hat) <dgibson@redhat.com>"
      # gpg:                 aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
      # gpg:                 aka "David Gibson (kernel.org) <dwg@kernel.org>"
      # Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392
      
      * remotes/dgibson/tags/ppc-for-3.1-20180925:
        40p: add fixed IRQ routing for LSI SCSI device
        lsi53c895a: add optional external IRQ via qdev
        scsi: remove unused lsi53c895a_create() and lsi53c810_create() functions
        scsi: move lsi53c8xx_create() callers to lsi53c8xx_handle_legacy_cmdline()
        scsi: add lsi53c8xx_handle_legacy_cmdline() function
        sm501: Adjust endianness of pixel value in rectangle fill
        spapr_pci: add an extra 'nr_msis' argument to spapr_populate_pci_dt
        spapr: increase the size of the IRQ number space
        spapr: introduce a spapr_irq class 'nr_msis' attribute
        40p: use OR gate to wire up raven PCI interrupts
        raven: some minor IRQ-related tidy-ups
        hw/ppc: on 40p machine, change default firmware to OpenBIOS
        target/ppc/cpu-models: Re-group the 970 CPUs together again
        Record history of ppcemb target in common.json
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      506e4a00
    • P
      Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging · 32556acb
      Peter Maydell 提交于
      # gpg: Signature made Tue 25 Sep 2018 04:51:25 BST
      # gpg:                using RSA key BDBE7B27C0DE3057
      # gpg: Good signature from "Jeffrey Cody <jcody@redhat.com>"
      # gpg:                 aka "Jeffrey Cody <jeff@codyprime.org>"
      # gpg:                 aka "Jeffrey Cody <codyprime@gmail.com>"
      # Primary key fingerprint: 9957 4B4D 3474 90E7 9D98  D624 BDBE 7B27 C0DE 3057
      
      * remotes/cody/tags/block-pull-request:
        curl: Make sslverify=off disable host as well as peer verification.
        block/rbd: add deprecation documentation for filename keyvalue pairs
        block/rbd: add iotest for rbd legacy keyvalue filename parsing
        block/rbd: Attempt to parse legacy filenames
        block/rbd: pull out qemu_rbd_convert_options
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      32556acb
    • P
      Merge remote-tracking branch 'remotes/armbru/tags/pull-qobject-2018-09-24' into staging · f69d20fa
      Peter Maydell 提交于
      QObject patches for 2018-09-24
      
      # gpg: Signature made Mon 24 Sep 2018 17:09:58 BST
      # gpg:                using RSA key 3870B400EB918653
      # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
      # gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
      # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653
      
      * remotes/armbru/tags/pull-qobject-2018-09-24:
        json: Eliminate lexer state IN_WHITESPACE, pseudo-token JSON_SKIP
        json: Eliminate lexer state IN_ERROR
        json: Nicer recovery from lexical errors
        json: Make lexer's "character consumed" logic less confusing
        json: Clean up how lexer consumes "end of input"
        json: Fix lexer for lookahead character beyond '\x7F'
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      f69d20fa
    • P
      Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2018-09-24' into staging · 2f831d04
      Peter Maydell 提交于
      Error reporting & miscellaneous patches for 2018-09-24
      
      # gpg: Signature made Mon 24 Sep 2018 16:16:50 BST
      # gpg:                using RSA key 3870B400EB918653
      # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
      # gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
      # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653
      
      * remotes/armbru/tags/pull-error-2018-09-24:
        MAINTAINERS: Fix F: patterns that don't match anything
        Drop "qemu:" prefix from error_report() arguments
        qemu-error: make use of {error, warn}_report_once_cond
        qemu-error: add {error, warn}_report_once_cond
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      2f831d04
    • P
      Merge remote-tracking branch 'remotes/xtensa/tags/20180918-xtensa' into staging · 8ca19bd8
      Peter Maydell 提交于
      target/xtensa updates:
      
      - fix gdbstub register counts;
      - add big-endian core test_kc705_be;
      - convert to do_transaction_failed and add test for failed memory
        transactions;
      - fix couple FPU2000 bugs;
      - fix s32c1i implementation;
      - clean up exception handlers generation in xtensa tests;
      - add support for semihosting console input through a chardev.
      
      # gpg: Signature made Tue 18 Sep 2018 18:35:50 BST
      # gpg:                using RSA key 51F9CC91F83FA044
      # gpg: Good signature from "Max Filippov <filippov@cadence.com>"
      # gpg:                 aka "Max Filippov <max.filippov@cogentembedded.com>"
      # gpg:                 aka "Max Filippov <jcmvbkbc@gmail.com>"
      # Primary key fingerprint: 2B67 854B 98E5 327D CDEB  17D8 51F9 CC91 F83F A044
      
      * remotes/xtensa/tags/20180918-xtensa:
        target/xtensa: support input from chardev console
        target/xtensa: fix s32c1i TCGMemOp flags
        tests/tcg/xtensa: only generate defined exception handlers
        tests/tcg/xtensa: move exception handlers to separate section
        target/xtensa: fix FPU2000 bugs
        tests/tcg/xtensa: add test for failed memory transactions
        target/xtensa: convert to do_transaction_failed
        target/xtensa: add test_kc705_be core
        target/xtensa: clean up gdbstub register handling
        target/xtensa: fix gdbstub register counts
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      8ca19bd8
    • P
      Merge remote-tracking branch 'remotes/mcayland/tags/qemu-sparc.for-upstream-20180914' into staging · 5b9000b5
      Peter Maydell 提交于
      qemu-sparc.for-upstream queue
      
      # gpg: Signature made Fri 14 Sep 2018 09:19:56 BST
      # gpg:                using RSA key 5BC2C56FAE0F321F
      # gpg: Good signature from "Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>"
      # Primary key fingerprint: CC62 1AB9 8E82 200D 915C  C9C4 5BC2 C56F AE0F 321F
      
      * remotes/mcayland/tags/qemu-sparc.for-upstream-20180914:
        sun4u: implement custom FWPathProvider
        sabre: generate correct fw path for sabre PCI host bridge
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      5b9000b5
    • P
      Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging · 62713b19
      Peter Maydell 提交于
      docker testing improvements
      
      # gpg: Signature made Mon 10 Sep 2018 04:56:45 BST
      # gpg:                using RSA key CA35624C6A9171C6
      # gpg: Good signature from "Fam Zheng <famz@redhat.com>"
      # Primary key fingerprint: 5003 7CB7 9706 0F76 F021  AD56 CA35 624C 6A91 71C6
      
      * remotes/famz/tags/docker-pull-request:
        docker: Clean dangling tarball files
        docker: Sort CentOS packages
        docker: Sort Ubuntu packages
        docker: Sort Fedora packages (i386-cross)
        docker: Sort Fedora packages
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      62713b19
    • R
      curl: Make sslverify=off disable host as well as peer verification. · 637fa44a
      Richard W.M. Jones 提交于
      The sslverify setting is supposed to turn off all TLS certificate
      checks in libcurl.  However because of the way we use it, it only
      turns off peer certificate authenticity checks
      (CURLOPT_SSL_VERIFYPEER).  This patch makes it also turn off the check
      that the server name in the certificate is the same as the server
      you're connecting to (CURLOPT_SSL_VERIFYHOST).
      
      We can use Google's server at 8.8.8.8 which happens to have a bad TLS
      certificate to demonstrate this:
      
      $ ./qemu-img create -q -f qcow2 -b 'json: { "file.sslverify": "off", "file.driver": "https", "file.url": "https://8.8.8.8/foo" }' /var/tmp/file.qcow2
      qemu-img: /var/tmp/file.qcow2: CURL: Error opening file: SSL: no alternative certificate subject name matches target host name '8.8.8.8'
      Could not open backing image to determine size.
      
      With this patch applied, qemu-img connects to the server regardless of
      the bad certificate:
      
      $ ./qemu-img create -q -f qcow2 -b 'json: { "file.sslverify": "off", "file.driver": "https", "file.url": "https://8.8.8.8/foo" }' /var/tmp/file.qcow2
      qemu-img: /var/tmp/file.qcow2: CURL: Error opening file: The requested URL returned error: 404 Not Found
      
      (The 404 error is expected because 8.8.8.8 is not actually serving a
      file called "/foo".)
      
      Of course the default (without sslverify=off) remains to always check
      the certificate:
      
      $ ./qemu-img create -q -f qcow2 -b 'json: { "file.driver": "https", "file.url": "https://8.8.8.8/foo" }' /var/tmp/file.qcow2
      qemu-img: /var/tmp/file.qcow2: CURL: Error opening file: SSL: no alternative certificate subject name matches target host name '8.8.8.8'
      Could not open backing image to determine size.
      
      Further information about the two settings is available here:
      
      https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html
      https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.htmlSigned-off-by: NRichard W.M. Jones <rjones@redhat.com>
      Message-id: 20180914095622.19698-1-rjones@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      637fa44a
    • J
      block/rbd: add deprecation documentation for filename keyvalue pairs · 3bebd37e
      Jeff Cody 提交于
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      Message-id: 647f5b5ab7efd8bf567a504c832b1d2d6f719b23.1536704901.git.jcody@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      3bebd37e
    • J
      block/rbd: add iotest for rbd legacy keyvalue filename parsing · 66e6a735
      Jeff Cody 提交于
      This is a small test that will check for the ability to parse
      both legacy and modern options for rbd.
      
      The way the test is set up is for failure to occur, but without
      having to wait to timeout on a non-existent rbd server.  The error
      messages in the success path show that the arguments were parsed.
      
      The failure behavior prior to the patch series that has this test, is
      qemu-img complaining about mandatory options (e.g. 'pool') not being
      provided.
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      Message-id: f830580e339b974a83ed4870d11adcdc17f49a47.1536704901.git.jcody@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      66e6a735
    • J
      block/rbd: Attempt to parse legacy filenames · 084d1d13
      Jeff Cody 提交于
      When we converted rbd to get rid of the older key/value-centric
      encoding format, we broke compatibility with image files with backing
      file strings encoded in the old format.
      
      This leaves a bit of an ugly conundrum, and a hacky solution.
      
      If the initial attempt to parse the "proper" options fails, it assumes
      that we may have an older key/value encoded filename.  Fall back to
      attempting to parse the filename, and extract the required options from
      it.  If that fails, pass along the original error message.
      
      We do not support mixed modern usage alongside legacy keyvalue pair
      usage.
      
      A deprecation warning has been added, although care should be taken
      when actually deprecating since the impact is not limited to
      commandline or qapi usage, but also opening existing images.
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      Message-id: 15b332e5432ad069441f7275a46080f465d789a0.1536704901.git.jcody@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      084d1d13
    • J
      block/rbd: pull out qemu_rbd_convert_options · f24b03b5
      Jeff Cody 提交于
      Code movement to pull the conversion from Qdict to BlockdevOptionsRbd
      into a helper function.
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NJohn Snow <jsnow@redhat.com>
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      Message-id: 5b49a980f2cde6610ab1df41bb0277d00b5db893.1536704901.git.jcody@redhat.com
      Signed-off-by: NJeff Cody <jcody@redhat.com>
      f24b03b5
    • M
      40p: add fixed IRQ routing for LSI SCSI device · 0358687b
      Mark Cave-Ayland 提交于
      Whilst the PReP specification describes how all PCI IRQs are routed via IRQ
      15 on the interrupt controller, the real 40p machine has a routing quirk in
      that the LSI SCSI device is routed directly to IRQ 13.
      
      Enable the external IRQ for the LSI SCSI device by wiring up the IRQ with
      qdev to the relevant interrupt controller gpio.
      Signed-off-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
      Acked-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Reviewed-by: NHervé Poussineau <hpoussin@reactos.org>
      Tested-by: NHervé Poussineau <hpoussin@reactos.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      0358687b
    • M
      lsi53c895a: add optional external IRQ via qdev · 3cc1b9cb
      Mark Cave-Ayland 提交于
      On some early machines the on-board PCI devices IRQs are wired directly to
      the interrupt controller instead of via the PCI host bridge.
      
      Add an optional external IRQ that if wired up via qdev will replace the
      in-built PCI IRQ.
      Signed-off-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NHervé Poussineau <hpoussin@reactos.org>
      Tested-by: NHervé Poussineau <hpoussin@reactos.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      3cc1b9cb
    • M
      scsi: remove unused lsi53c895a_create() and lsi53c810_create() functions · e090a054
      Mark Cave-Ayland 提交于
      Now that these functions are no longer required they can be removed.
      Signed-off-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
      Reviewed-by: NThomas Huth <thuth@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      e090a054
    • M
      scsi: move lsi53c8xx_create() callers to lsi53c8xx_handle_legacy_cmdline() · 877eb21d
      Mark Cave-Ayland 提交于
      As part of commits a64aa578 "hw: Deprecate -drive if=scsi with non-onboard
      HBAs" and b891538e "hw/ppc/prep: Fix implicit creation of "-drive if=scsi"
      devices" the lsi53c895a_create() and lsi53c810_create() functions were added
      to wrap pci_create_simple() and scsi_bus_legacy_handle_cmdline().
      
      Unfortunately this prevents us from changing qdev properties on the device
      and/or changing the PCI configuration. By switching over to using the new
      lsi53c8xx_handle_legacy_cmdline() function then the caller can now configure
      and realize the LSI SCSI device exactly as required.
      Signed-off-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
      Reviewed-by: NThomas Huth <thuth@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Acked-by: Peter Maydell <peter.maydell@linaro.org> [arm parts]
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      877eb21d
    • M
      scsi: add lsi53c8xx_handle_legacy_cmdline() function · f74a4f3a
      Mark Cave-Ayland 提交于
      This is the function that will soon be used to replace lsi53c895a_create() and
      lsi53c810_create().
      Signed-off-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
      Reviewed-by: NThomas Huth <thuth@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      f74a4f3a