1. 12 3月, 2018 10 次提交
  2. 10 3月, 2018 1 次提交
    • P
      Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging · e4ae62b8
      Peter Maydell 提交于
      # gpg: Signature made Fri 09 Mar 2018 13:19:02 GMT
      # gpg:                using RSA key 9CA4ABB381AB73C8
      # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>"
      # gpg:                 aka "Stefan Hajnoczi <stefanha@gmail.com>"
      # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35  775A 9CA4 ABB3 81AB 73C8
      
      * remotes/stefanha/tags/block-pull-request:
        vl: introduce vm_shutdown()
        virtio-scsi: fix race between .ioeventfd_stop() and vq handler
        virtio-blk: fix race between .ioeventfd_stop() and vq handler
        block: add aio_wait_bh_oneshot()
        virtio-blk: dataplane: Don't batch notifications if EVENT_IDX is present
        README: Fix typo 'git-publish'
        block: Fix qemu crash when using scsi-block
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      e4ae62b8
  3. 09 3月, 2018 10 次提交
    • P
      memory: fix flatview_access_valid RCU read lock/unlock imbalance · b39b61e4
      Paolo Bonzini 提交于
      Fixes: 11e732a5Reported-by: NCornelia Huck <cohuck@redhat.com>
      Reported-by: Nluigi burdo <intermediadc@hotmail.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      Tested-by: NCornelia Huck <cohuck@redhat.com>
      Tested-by: NThomas Huth <thuth@redhat.com>
      Message-id: 20180307130238.19358-1-pbonzini@redhat.com
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      b39b61e4
    • S
      cffad426
    • P
      Merge remote-tracking branch 'remotes/riscv/tags/riscv-qemu-upstream-v8.2' into staging · d9bbfea6
      Peter Maydell 提交于
      QEMU RISC-V Emulation Support (RV64GC, RV32GC)
      
      This release renames the SiFive machines to sifive_e and sifive_u
      to represent the SiFive Everywhere and SiFive Unleashed platforms.
      SiFive has configurable soft-core IP, so it is intended that these
      machines will be extended to enable a variety of SiFive IP blocks.
      The CPU definition infrastructure has been improved and there are
      now vendor CPU modules including the SiFiVe E31, E51, U34 and U54
      cores. The emulation accuracy for the E series has been improved
      by disabling the MMU for the E series. S mode has been disabled on
      cores that only support M mode and U mode. The two Spike machines
      that support two privileged ISA versions have been coalesced into
      one file. This series has Signed-off-by from the core contributors.
      
      *** Known Issues ***
      
      * Disassembler has some checkpatch warnings for the sake of code brevity
      * scripts/qemu-binfmt-conf.sh has checkpatch warnings due to line length
      * PMP (Physical Memory Protection) is as-of-yet unused and needs testing
      
      *** Changelog ***
      
      v8.2
      
      * Rebase
      
      v8.1
      
      * Fix missed case of renaming spike_v1.9 to spike_v1.9.1
      
      v8
      
      * Added linux-user/riscv/target_elf.h during rebase
      * Make resetvec configurable and clear mpp and mie on reset
      * Use SiFive E31, E51, U34 and U54 cores in SiFive machines
      * Define SiFive E31, E51, U34 and U54 cores
      * Refactor CPU core definition in preparation for vendor cores
      * Prevent S or U mode unless S or U extensions are present
      * SiFive E Series cores have no MMU
      * SiFive E Series cores have U mode
      * Make privileged ISA v1.10 implicit in CPU types
      * Remove DRAM_BASE and EXT_IO_BASE as they vary by machine
      * Correctly handle mtvec and stvec alignment with respect to RVC
      * Print more machine mode state in riscv_cpu_dump_state
      * Make riscv_isa_string use compact extension order method
      * Fix bug introduced in v6 RISCV_CPU_TYPE_NAME macro change
      * Parameterize spike v1.9.1 config string
      * Coalesce spike_v1.9.1 and spike_v1.10 machines
      * Rename sifive_e300 to sifive_e, and sifive_u500 to sifive_u
      
      v7
      
      * Make spike_v1.10 the default machine
      * Rename spike_v1.9 to spike_v1.9.1 to match privileged spec version
      * Remove empty target/riscv/trace-events file
      * Monitor ROM 32-bit reset code needs to be target endian
      * Add TARGET_TIOCGPTPEER to linux-user/riscv/termbits.h
      * Add -initrd support to the virt board
      * Fix naming in spike machine interface header
      * Update copyright notice on RISC-V Spike machines
      * Update copyright notice on RISC-V HTIF Console device
      * Change CPU Core and translator to GPLv2+
      * Change RISC-V Disassembler to GPLv2+
      * Change SiFive Test Finisher to GPLv2+
      * Change SiFive CLINT to GPLv2+
      * Change SiFive PRCI to GPLv2+
      * Change SiFive PLIC to GPLv2+
      * Change RISC-V spike machines to GPLv2+
      * Change RISC-V virt machine to GPLv2+
      * Change SiFive E300 machine to GPLv2+
      * Change SiFive U500 machine to GPLv2+
      * Change RISC-V Hart Array to GPLv2+
      * Change RISC-V HTIF device to GPLv2+
      * Change SiFiveUART device to GPLv2+
      
      v6
      
      * Drop IEEE 754-201x minimumNumber/maximumNumber for fmin/fmax
      * Remove some unnecessary commented debug statements
      * Change RISCV_CPU_TYPE_NAME to use riscv-cpu suffix
      * Define all CPU variants for linux-user
      * qemu_log calls require trailing \n
      * Replace PLIC printfs with qemu_log
      * Tear out unused HTIF code and eliminate shouting debug messages
      * Fix illegal instruction when sfence.vma is passed (rs2) arguments
      * Make updates to PTE accessed and dirty bits atomic
      * Only require atomic PTE updates on MTTCG enabled guests
      * Page fault if accessed or dirty bits can't be updated
      * Fix get_physical_address PTE reads and writes on riscv32
      * Remove erroneous comments from the PLIC
      * Default enable MTTCG
      * Make WFI less conservative
      * Unify local interrupt handling
      * Expunge HTIF interrupts
      * Always access mstatus.mip under a lock
      * Don't implement rdtime/rdtimeh in system mode (bbl emulates them)
      * Implement insreth/cycleh for rv32 and always enable user-mode counters
      * Add GDB stub support for reading and writing CSRs
      * Rename ENABLE_CHARDEV #ifdef from HTIF code
      * Replace bad HTIF ELF code with load_elf symbol callback
      * Convert chained if else fault handlers to switch statements
      * Use RISCV exception codes for linux-user page faults
      
      v5
      
      * Implement NaN-boxing for flw, set high order bits to 1
      * Use float_muladd_negate_* flags to floatXX_muladd
      * Use IEEE 754-201x minimumNumber/maximumNumber for fmin/fmax
      * Fix TARGET_NR_syscalls
      * Update linux-user/riscv/syscall_nr.h
      * Fix FENCE.I, needs to terminate translation block
      * Adjust unusual convention for interruptno >= 0
      
      v4
      
      * Add @riscv: since 2.12 to CpuInfoArch
      * Remove misleading little-endian comment from load_kernel
      * Rename cpu-model property to cpu-type
      * Drop some unnecessary inline function attributes
      * Don't allow GDB to set value of x0 register
      * Remove unnecessary empty property lists
      * Add Test Finisher device to implement poweroff in virt machine
      * Implement priv ISA v1.10 trap and sret/mret xPIE/xIE behavior
      * Store fflags data in fp_status
      * Purge runtime users of helper_raise_exception
      * Fix validate_csr
      * Tidy gen_jalr
      * Tidy immediate shifts
      * Add gen_exception_inst_addr_mis
      * Add gen_exception_debug
      * Add gen_exception_illegal
      * Tidy helper_fclass_*
      * Split rounding mode setting to a new function
      * Enforce MSTATUS_FS via TB flags
      * Implement acquire/release barrier semantics
      * Use atomic operations as required
      * Fix FENCE and FENCE_I
      * Remove commented code from spike machines
      * PAGE_WRITE permissions can be set on loads if page is already dirty
      * The result of format conversion on an NaN must be a quiet NaN
      * Add missing process_queued_cpu_work to riscv linux-user
      * Remove float(32|64)_classify from cpu.h
      * Removed nonsensical unions aliasing the same type
      * Use uintN_t instead of uintN_fast_t in fpu_helper.c
      * Use macros for FPU exception values in softfloat_flags_to_riscv
      * Move code to set round mode into set_fp_round_mode function
      * Convert set_fp_exceptions from a macro to an inline function
      * Convert round mode helper into an inline function
      * Make fpu_helper ieee_rm array static const
      * Include cpu_mmu_index in cpu_get_tb_cpu_state flags
      * Eliminate MPRV influence on mmu_index
      * Remove unrecoverable do_unassigned_access function
      * Only update PTE accessed and dirty bits if necessary
      * Remove unnecessary tlb_flush in set_mode as mode is in mmu_idx
      * Remove buggy support for misa writes. misa writes are optional
        and are not implemented in any known hardware
      * Always set PTE read or execute permissions during page walk
      * Reorder helper function declarations to match order in helper.c
      * Remove redundant variable declaration in get_physical_address
      * Remove duplicated code from get_physical_address
      * Use mmu_idx instead of mem_idx in riscv_cpu_get_phys_page_debug
      
      v3
      
      * Fix indentation in PMP and HTIF debug macros
      * Fix disassembler checkpatch open brace '{' on next line errors
      * Fix trailing statements on next line in decode_inst_decompress
      * NOTE: the other checkpatch issues have been reviewed previously
      
      v2
      
      * Remove redundant NULL terminators from disassembler register arrays
      * Change disassembler register name arrays to const
      * Refine disassembler internal function names
      * Update dates in disassembler copyright message
      * Remove #ifdef CONFIG_USER_ONLY version of cpu_has_work
      * Use ULL suffix on 64-bit constants
      * Move riscv_cpu_mmu_index from cpu.h to helper.c
      * Move riscv_cpu_hw_interrupts_pending from cpu.h to helper.c
      * Remove redundant TARGET_HAS_ICE from cpu.h
      * Use qemu_irq instead of void* for irq definition in cpu.h
      * Remove duplicate typedef from struct CPURISCVState
      * Remove redundant g_strdup from cpu_register
      * Remove redundant tlb_flush from riscv_cpu_reset
      * Remove redundant mode calculation from get_physical_address
      * Remove redundant debug mode printf and dcsr comment
      * Remove redundant clearing of MSB for bare physical addresses
      * Use g_assert_not_reached for invalid mode in get_physical_address
      * Use g_assert_not_reached for unreachable checks in get_physical_address
      * Use g_assert_not_reached for unreachable type in raise_mmu_exception
      * Return exception instead of aborting for misaligned fetches
      * Move exception defines from cpu.h to cpu_bits.h
      * Remove redundant breakpoint control definitions from cpu_bits.h
      * Implement riscv_cpu_unassigned_access exception handling
      * Log and raise exceptions for unimplemented CSRs
      * Match Spike HTIF exit behavior - don’t print TEST-PASSED
      * Make frm,fflags,fcsr writes trap when mstatus.FS is clear
      * Use g_assert_not_reached for unreachable invalid mode
      * Make hret,uret,dret generate illegal instructions
      * Move riscv_cpu_dump_state and int/fpr regnames to cpu.c
      * Lift interrupt flag and mask into constants in cpu_bits.h
      * Change trap debugging to use qemu_log_mask LOG_TRACE
      * Change CSR debugging to use qemu_log_mask LOG_TRACE
      * Change PMP debugging to use qemu_log_mask LOG_TRACE
      * Remove commented code from pmp.c
      * Change CpuInfoRISCV qapi schema docs to Since 2.12
      * Change RV feature macro to use target_ulong cast
      * Remove riscv_feature and instead use misa extension flags
      * Make riscv_flush_icache_syscall a no-op
      * Undo checkpatch whitespace fixes in unrelated linux-user code
      * Remove redudant constants and tidy up cpu_bits.h
      * Make helper_fence_i a no-op
      * Move include "exec/cpu-all" to end of cpu.h
      * Rename set_privilege to riscv_set_mode
      * Move redundant forward declaration for cpu_riscv_translate_address
      * Remove TCGV_UNUSED from riscv_translate_init
      * Add comment to pmp.c stating the code is untested and currently unused
      * Use ctz to simplify decoding of PMP NAPOT address ranges
      * Change pmp_is_in_range to use than equal for end addresses
      * Fix off by one error in pmp_update_rule
      * Rearrange PMP_DEBUG so that formatting is compile-time checked
      * Rearrange trap debugging so that formatting is compile-time checked
      * Rearrange PLIC debugging so that formatting is compile-time checked
      * Use qemu_log/qemu_log_mask for HTIF logging and debugging
      * Move exception and interrupt names into cpu.c
      * Add Palmer Dabbelt as a RISC-V Maintainer
      * Rebase against current qemu master branch
      
      v1
      
      * initial version based on forward port from riscv-qemu repository
      
      *** Background ***
      
      "RISC-V is an open, free ISA enabling a new era of processor innovation
      through open standard collaboration. Born in academia and research,
      RISC-V ISA delivers a new level of free, extensible software and
      hardware freedom on architecture, paving the way for the next 50 years
      of computing design and innovation."
      
      The QEMU RISC-V port has been developed and maintained out-of-tree for
      several years by Sagar Karandikar and Bastian Koppelmann. The RISC-V
      Privileged specification has evolved substantially over this period but
      has recently been solidifying. The RISC-V Base ISA has been frozon for
      some time and the Privileged ISA, GCC toolchain and Linux ABI are now
      quite stable. I have recently joined Sagar and Bastian as a RISC-V QEMU
      Maintainer and hope to support upstreaming the port.
      
      There are multiple vendors taping out, preparing to ship, or shipping
      silicon that implements the RISC-V Privileged ISA Version 1.10. There
      are also several RISC-V Soft-IP cores implementing Privileged ISA
      Version 1.10 that run on FPGA such as SiFive's Freedom U500 Platform
      and the U54‑MC RISC-V Core IP, among many more implementations from a
      variety of vendors. See https://riscv.org/ for more details.
      
      RISC-V support was upstreamed in binutils 2.28 and GCC 7.1 in the first
      half of 2016. RISC-V support is now available in LLVM top-of-tree and
      the RISC-V Linux port was accepted into Linux 4.15-rc1 late last year
      and is available in the Linux 4.15 release. GLIBC 2.27 added support
      for the RISC-V ISA running on Linux (requires at least binutils-2.30,
      gcc-7.3.0, and linux-4.15). We believe it is timely to submit the
      RISC-V QEMU port for upstream review with the goal of incorporating
      RISC-V support into the upcoming QEMU 2.12 release.
      
      The RISC-V QEMU port is still under active development, mostly with
      respect to device emulation, the addition of Hypervisor support as
      specified in the RISC-V Draft Privileged ISA Version 1.11, and Vector
      support once the first draft is finalized later this year. We believe
      now is the appropriate time for RISC-V QEMU development to be carried
      out in the main QEMU repository as the code will benefit from more
      rigorous review. The RISC-V QEMU port currently supports all the ISA
      extensions that have been finalized and frozen in the Base ISA.
      
      Blog post about recent additions to RISC-V QEMU: https://goo.gl/fJ4zgk
      
      The RISC-V QEMU wiki: https://github.com/riscv/riscv-qemu/wiki
      
      Instructions for building a busybox+dropbear root image, BBL (Berkeley
      Boot Loader) and linux kernel image for use with the RISC-V QEMU
      'virt' machine: https://github.com/michaeljclark/busybear-linux
      
      *** Overview ***
      
      The RISC-V QEMU port implements the following specifications:
      
      * RISC-V Instruction Set Manual Volume I: User-Level ISA Version 2.2
      * RISC-V Instruction Set Manual Volume II: Privileged ISA Version 1.9.1
      * RISC-V Instruction Set Manual Volume II: Privileged ISA Version 1.10
      
      The RISC-V QEMU port supports the following instruction set extensions:
      
      * RV32GC with Supervisor-mode and User-mode (RV32IMAFDCSU)
      * RV64GC with Supervisor-mode and User-mode (RV64IMAFDCSU)
      
      The RISC-V QEMU port adds the following targets to QEMU:
      
      * riscv32-softmmu
      * riscv64-softmmu
      * riscv32-linux-user
      * riscv64-linux-user
      
      The RISC-V QEMU port supports the following hardware:
      
      * HTIF Console (Host Target Interface)
      * SiFive CLINT (Core Local Interruptor) for Timer interrupts and IPIs
      * SiFive PLIC (Platform Level Interrupt Controller)
      * SiFive Test (Test Finisher) for exiting simulation
      * SiFive UART, PRCI, AON, PWM, QSPI support is partially implemented
      * VirtIO MMIO (GPEX PCI support will be added in a future patch)
      * Generic 16550A UART emulation using 'hw/char/serial.c'
      * MTTCG and SMP support (PLIC and CLINT) on the 'virt' machine
      
      The RISC-V QEMU full system emulator supports 5 machines:
      
      * 'spike_v1.9.1', CLINT, PLIC, HTIF console, config-string, Priv v1.9.1
      * 'spike_v1.10', CLINT, PLIC, HTIF console, device-tree, Priv v1.10
      * 'sifive_e', CLINT, PLIC, SiFive UART, HiFive1 compat, Priv v1.10
      * 'sifive_u', CLINT, PLIC, SiFive UART, device-tree, Priv v1.10
      * 'virt', CLINT, PLIC, 16550A UART, VirtIO, device-tree, Priv v1.10
      
      This is a list of RISC-V QEMU Port Contributors:
      
      * Alex Suykov
      * Andreas Schwab
      * Antony Pavlov
      * Bastian Koppelmann
      * Bruce Hoult
      * Chih-Min Chao
      * Daire McNamara
      * Darius Rad
      * David Abdurachmanov
      * Hesham Almatary
      * Ivan Griffin
      * Jim Wilson
      * Kito Cheng
      * Michael Clark
      * Palmer Dabbelt
      * Richard Henderson
      * Sagar Karandikar
      * Shea Levy
      * Stefan O'Rear
      
      Notes:
      
      * contributor email addresses available off-list on request.
      * checkpatch has been run on all 23 patches.
      * checkpatch exceptions are noted in patches that have errors.
      * passes "make check" on full build for all targets
      * tested riscv-linux-4.6.2 on 'spike_v1.9.1' machine
      * tested riscv-linux-4.15 on 'spike_v1.10' and 'virt' machines
      * tested SiFive HiFive1 binaries in 'sifive_e' machine
      * tested RV64 on 32-bit i386
      
      This patch series includes the following patches:
      
      # gpg: Signature made Thu 08 Mar 2018 19:40:20 GMT
      # gpg:                using DSA key 6BF1D7B357EF3E4F
      # gpg: Good signature from "Michael Clark <michaeljclark@mac.com>"
      # gpg:                 aka "Michael Clark <mjc@sifive.com>"
      # gpg:                 aka "Michael Clark <michael@metaparadigm.com>"
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 7C99 930E B17C D8BA 073D  5EFA 6BF1 D7B3 57EF 3E4F
      
      * remotes/riscv/tags/riscv-qemu-upstream-v8.2: (23 commits)
        RISC-V Build Infrastructure
        SiFive Freedom U Series RISC-V Machine
        SiFive Freedom E Series RISC-V Machine
        SiFive RISC-V PRCI Block
        SiFive RISC-V UART Device
        RISC-V VirtIO Machine
        SiFive RISC-V Test Finisher
        RISC-V Spike Machines
        SiFive RISC-V PLIC Block
        SiFive RISC-V CLINT Block
        RISC-V HART Array
        RISC-V HTIF Console
        Add symbol table callback interface to load_elf
        RISC-V Linux User Emulation
        RISC-V Physical Memory Protection
        RISC-V TCG Code Generation
        RISC-V GDB Stub
        RISC-V FPU Support
        RISC-V CPU Helpers
        RISC-V Disassembler
        ...
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      d9bbfea6
    • P
      Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180308' into staging · 9fa673c3
      Peter Maydell 提交于
      Fixes and cleanups for the 2.12 softfreeze.
      
      # gpg: Signature made Thu 08 Mar 2018 17:53:14 GMT
      # gpg:                using RSA key DECF6B93C6F02FAF
      # gpg: Good signature from "Cornelia Huck <conny@cornelia-huck.de>"
      # gpg:                 aka "Cornelia Huck <huckc@linux.vnet.ibm.com>"
      # gpg:                 aka "Cornelia Huck <cornelia.huck@de.ibm.com>"
      # gpg:                 aka "Cornelia Huck <cohuck@kernel.org>"
      # gpg:                 aka "Cornelia Huck <cohuck@redhat.com>"
      # Primary key fingerprint: C3D0 D66D C362 4FF6 A8C0  18CE DECF 6B93 C6F0 2FAF
      
      * remotes/cohuck/tags/s390x-20180308:
        s390x/virtio: Convert virtio-ccw from *_exit to *_unrealize
        pc-bios/s390-ccw: Move string arrays from bootmap header to .c file
        s390x/sclp: clean up sclp masks
        s390x/sclp: proper support of larger send and receive masks
        vfio-ccw: license text should indicate GPL v2 or later
        s390x/sclpconsole: Remove dead code - remove exit handlers
        numa: we don't implement NUMA for s390x
        hw/s390x: Add the possibility to specify the netboot image on the command line
        target/s390x: Remove leading underscores from #defines
        s390/ipl: only print boot menu error if -boot menu=on was specified
        hw/s390x/ipl: Bail out if the network bootloader can not be found
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      9fa673c3
    • S
      vl: introduce vm_shutdown() · 4486e89c
      Stefan Hajnoczi 提交于
      Commit 00d09fdb ("vl: pause vcpus before
      stopping iothreads") and commit dce8921b
      ("iothread: Stop threads before main() quits") tried to work around the
      fact that emulation was still active during termination by stopping
      iothreads.  They suffer from race conditions:
      1. virtio_scsi_handle_cmd_vq() racing with iothread_stop_all() hits the
         virtio_scsi_ctx_check() assertion failure because the BDS AioContext
         has been modified by iothread_stop_all().
      2. Guest vq kick racing with main loop termination leaves a readable
         ioeventfd that is handled by the next aio_poll() when external
         clients are enabled again, resulting in unwanted emulation activity.
      
      This patch obsoletes those commits by fully disabling emulation activity
      when vcpus are stopped.
      
      Use the new vm_shutdown() function instead of pause_all_vcpus() so that
      vm change state handlers are invoked too.  Virtio devices will now stop
      their ioeventfds, preventing further emulation activity after vm_stop().
      
      Note that vm_stop(RUN_STATE_SHUTDOWN) cannot be used because it emits a
      QMP STOP event that may affect existing clients.
      
      It is no longer necessary to call replay_disable_events() directly since
      vm_shutdown() does so already.
      
      Drop iothread_stop_all() since it is no longer used.
      
      Cc: Fam Zheng <famz@redhat.com>
      Cc: Kevin Wolf <kwolf@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 20180307144205.20619-5-stefanha@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      4486e89c
    • S
      virtio-scsi: fix race between .ioeventfd_stop() and vq handler · 184b9623
      Stefan Hajnoczi 提交于
      If the main loop thread invokes .ioeventfd_stop() just as the vq handler
      function begins in the IOThread then the handler may lose the race for
      the AioContext lock.  By the time the vq handler is able to acquire the
      AioContext lock the ioeventfd has already been removed and the handler
      isn't supposed to run anymore!
      
      Use the new aio_wait_bh_oneshot() function to perform ioeventfd removal
      from within the IOThread.  This way no races with the vq handler are
      possible.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 20180307144205.20619-4-stefanha@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      184b9623
    • S
      virtio-blk: fix race between .ioeventfd_stop() and vq handler · 1010cadf
      Stefan Hajnoczi 提交于
      If the main loop thread invokes .ioeventfd_stop() just as the vq handler
      function begins in the IOThread then the handler may lose the race for
      the AioContext lock.  By the time the vq handler is able to acquire the
      AioContext lock the ioeventfd has already been removed and the handler
      isn't supposed to run anymore!
      
      Use the new aio_wait_bh_oneshot() function to perform ioeventfd removal
      from within the IOThread.  This way no races with the vq handler are
      possible.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 20180307144205.20619-3-stefanha@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      1010cadf
    • S
      block: add aio_wait_bh_oneshot() · b89d92f3
      Stefan Hajnoczi 提交于
      Sometimes it's necessary for the main loop thread to run a BH in an
      IOThread and wait for its completion.  This primitive is useful during
      startup/shutdown to synchronize and avoid race conditions.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 20180307144205.20619-2-stefanha@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      b89d92f3
    • P
      Merge remote-tracking branch... · f6d81cde
      Peter Maydell 提交于
      Merge remote-tracking branch 'remotes/stsquad/tags/pull-shippable-disable-ppc-080318-1' into staging
      
      One fix to disable broken ppc cross-compile test on shippable
      
      # gpg: Signature made Thu 08 Mar 2018 15:00:23 GMT
      # gpg:                using RSA key FBD0DB095A9E2A44
      # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>"
      # Primary key fingerprint: 6685 AE99 E751 67BC AFC8  DF35 FBD0 DB09 5A9E 2A44
      
      * remotes/stsquad/tags/pull-shippable-disable-ppc-080318-1:
        .shippable.yml: disable powerpc-cross image
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      f6d81cde
    • N
      s390x/virtio: Convert virtio-ccw from *_exit to *_unrealize · 24118af8
      Nia Alarie 提交于
      Signed-off-by: NNia Alarie <nia.alarie@gmail.com>
      Message-Id: <20180307162958.11232-1-nia.alarie@gmail.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      24118af8
  4. 08 3月, 2018 19 次提交
    • S
      virtio-blk: dataplane: Don't batch notifications if EVENT_IDX is present · 12c1c7d7
      Sergio Lopez 提交于
      Commit 5b2ffbe4 ("virtio-blk: dataplane:
      notify guest as a batch") deferred guest notification to a BH in order
      batch notifications, with purpose of avoiding flooding the guest with
      interruptions.
      
      This optimization came with a cost. The average latency perceived in the
      guest is increased by a few microseconds, but also when multiple IO
      operations finish at the same time, the guest won't be notified until
      all completions from each operation has been run. On the contrary,
      virtio-scsi issues the notification at the end of each completion.
      
      On the other hand, nowadays we have the EVENT_IDX feature that allows a
      better coordination between QEMU and the Guest OS to avoid sending
      unnecessary interruptions.
      
      With this change, virtio-blk/dataplane only batches notifications if the
      EVENT_IDX feature is not present.
      
      Some numbers obtained with fio (ioengine=sync, iodepth=1, direct=1):
       - Test specs:
         * fio-3.4 (ioengine=sync, iodepth=1, direct=1)
         * qemu master
         * virtio-blk with a dedicated iothread (default poll-max-ns)
         * backend: null_blk nr_devices=1 irqmode=2 completion_nsec=280000
         * 8 vCPUs pinned to isolated physical cores
         * Emulator and iothread also pinned to separate isolated cores
         * variance between runs < 1%
      
       - Not patched
         * numjobs=1:  lat_avg=327.32  irqs=29998
         * numjobs=4:  lat_avg=337.89  irqs=29073
         * numjobs=8:  lat_avg=342.98  irqs=28643
      
       - Patched:
         * numjobs=1:  lat_avg=323.92  irqs=30262
         * numjobs=4:  lat_avg=332.65  irqs=29520
         * numjobs=8:  lat_avg=335.54  irqs=29323
      Signed-off-by: NSergio Lopez <slp@redhat.com>
      Message-id: 20180307114459.26636-1-slp@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      12c1c7d7
    • F
      README: Fix typo 'git-publish' · 7c9e2748
      Fam Zheng 提交于
      Reported-by: NAlberto Garcia <berto@igalia.com>
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Message-id: 20180306024328.19195-1-famz@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      7c9e2748
    • D
      block: Fix qemu crash when using scsi-block · c060332c
      Deepa Srinivasan 提交于
      Starting qemu with the following arguments causes qemu to segfault:
      ... -device lsi,id=lsi0 -drive file=iscsi:<...>,format=raw,if=none,node-name=
      iscsi1 -device scsi-block,bus=lsi0.0,id=<...>,drive=iscsi1
      
      This patch fixes blk_aio_ioctl() so it does not pass stack addresses to
      blk_aio_ioctl_entry() which may be invoked after blk_aio_ioctl() returns. More
      details about the bug follow.
      
      blk_aio_ioctl() invokes blk_aio_prwv() with blk_aio_ioctl_entry as the
      coroutine parameter. blk_aio_prwv() ultimately calls aio_co_enter().
      
      When blk_aio_ioctl() is executed from within a coroutine context (e.g.
      iscsi_bh_cb()), aio_co_enter() adds the coroutine (blk_aio_ioctl_entry) to
      the current coroutine's wakeup queue. blk_aio_ioctl() then returns.
      
      When blk_aio_ioctl_entry() executes later, it accesses an invalid pointer:
      ....
          BlkRwCo *rwco = &acb->rwco;
      
          rwco->ret = blk_co_ioctl(rwco->blk, rwco->offset,
                                   rwco->qiov->iov[0].iov_base);  <--- qiov is
                                                                       invalid here
      ...
      
      In the case when blk_aio_ioctl() is called from a non-coroutine context,
      blk_aio_ioctl_entry() executes immediately. But if bdrv_co_ioctl() calls
      qemu_coroutine_yield(), blk_aio_ioctl() will return. When the coroutine
      execution is complete, control returns to blk_aio_ioctl_entry() after the call
      to blk_co_ioctl(). There is no invalid reference after this point, but the
      function is still holding on to invalid pointers.
      
      The fix is to change blk_aio_prwv() to accept a void pointer for the IO buffer
      rather than a QEMUIOVector. blk_aio_prwv() passes this through in BlkRwCo and the
      coroutine function casts it to QEMUIOVector or uses the void pointer directly.
      Signed-off-by: NDeepa Srinivasan <deepa.srinivasan@oracle.com>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Reviewed-by: NMark Kanda <mark.kanda@oracle.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      c060332c
    • T
      pc-bios/s390-ccw: Move string arrays from bootmap header to .c file · 6af978ae
      Thomas Huth 提交于
      bootmap.h can currently only be included once - otherwise the linker
      complains about multiple definitions of the "magic" strings. It's a
      bad style to define string arrays in header files, so let's better
      move these to the bootmap.c file instead where they are used.
      Signed-off-by: NThomas Huth <thuth@redhat.com>
      Message-Id: <1520317081-5341-1-git-send-email-thuth@redhat.com>
      Reviewed-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      6af978ae
    • C
      s390x/sclp: clean up sclp masks · 1ffed98f
      Claudio Imbrenda 提交于
      Introduce an sccb_mask_t to be used for SCLP event masks instead of just
      unsigned int or uint32_t. This will allow later to extend the mask with
      more ease.
      Signed-off-by: NClaudio Imbrenda <imbrenda@linux.vnet.ibm.com>
      Message-Id: <1519407778-23095-3-git-send-email-imbrenda@linux.vnet.ibm.com>
      Reviewed-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      1ffed98f
    • C
      s390x/sclp: proper support of larger send and receive masks · bc61c8c6
      Claudio Imbrenda 提交于
      Until 67915de9 ("s390x/event-facility: variable-length event masks")
      we only supported sclp event masks with a size of exactly 4 bytes, even
      though the architecture allows the guests to set up sclp event masks
      from 1 to 1021 bytes in length.
      After that patch, the behaviour was almost compliant, but some issues
      were still remaining, in particular regarding the handling of selective
      reads and migration.
      
      When setting the sclp event mask, a mask size is also specified. Until
      now we only considered the size in order to decide which bits to save
      in the internal state. On the other hand, when a guest performs a
      selective read, it sends a mask, but it does not specify a size; the
      implied size is the size of the last mask that has been set.
      
      Specifying bits in the mask of selective read that are not available in
      the internal mask should return an error, and bits past the end of the
      mask should obviously be ignored. This can only be achieved by keeping
      track of the lenght of the mask.
      
      The mask length is thus now part of the internal state that needs to be
      migrated.
      
      This patch fixes the handling of selective reads, whose size will now
      match the length of the event mask, as per architecture.
      
      While the default behaviour is to be compliant with the architecture,
      when using older machine models the old broken behaviour is selected
      (allowing only masks of size exactly 4), in order to be able to migrate
      toward older versions.
      
      Fixes: 67915de9 ("s390x/event-facility: variable-length event masks")
      Signed-off-by: NClaudio Imbrenda <imbrenda@linux.vnet.ibm.com>
      Message-Id: <1519407778-23095-2-git-send-email-imbrenda@linux.vnet.ibm.com>
      Reviewed-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      bc61c8c6
    • C
      vfio-ccw: license text should indicate GPL v2 or later · 08b824aa
      Cornelia Huck 提交于
      The license text currently specifies "any version" of the GPL. It
      is unlikely that GPL v1 was ever intended; change this to the
      standard "or any later version" text.
      
      Cc: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
      Cc: Xiao Feng Ren <renxiaof@linux.vnet.ibm.com>
      Cc: Pierre Morel <pmorel@linux.vnet.ibm.com>
      Acked-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Reviewed-by: NDong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
      Acked-by: NPierre Morel <pmorel@linux.vnet.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      08b824aa
    • N
      s390x/sclpconsole: Remove dead code - remove exit handlers · 2231384e
      Nia Alarie 提交于
      The other event handlers (quiesce and cpu) do not define these
      handlers, and this one does nothing, so it can be removed.
      Signed-off-by: NNia Alarie <nia.alarie@gmail.com>
      Reviewed-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Message-Id: <20180306100721.19419-1-nia.alarie@gmail.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      2231384e
    • D
      numa: we don't implement NUMA for s390x · 81ce6aa5
      David Hildenbrand 提交于
      Right now it is possible to crash QEMU for s390x by providing e.g.
          -numa node,nodeid=0,cpus=0-1
      
      Problem is, that numa.c uses mc->cpu_index_to_instance_props as an
      indicator whether NUMA is supported by a machine type. We don't
      implement NUMA for s390x ("topology") yet. However we need
      mc->cpu_index_to_instance_props for query-cpus.
      
      So let's fix this case by also checking for mc->get_default_cpu_node_id,
      which will be needed by machine_set_cpu_numa_node().
      
      qemu-system-s390x: -numa node,nodeid=0,cpus=0-1: NUMA is not supported by
                         this machine-type
      
      While at it, make s390_cpu_index_to_props() look like on other
      architectures.
      Signed-off-by: NDavid Hildenbrand <david@redhat.com>
      Message-Id: <20180227110255.20999-1-david@redhat.com>
      Reviewed-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      81ce6aa5
    • T
      hw/s390x: Add the possibility to specify the netboot image on the command line · 3c4e9baa
      Thomas Huth 提交于
      The file name of the netboot binary is currently hard-coded to
      "s390-netboot.img", without a possibility for the user to select
      an alternative firmware image here. That's unfortunate, especially
      since the basics are already there: The filename is a property of
      the s390-ipl device. So we just have to add a check whether the user
      already provided the property and only set the default if the string
      is still empty. Now it is possible to select a different firmware
      image with "-global s390-ipl.netboot_fw=/path/to/s390-netboot.img".
      Signed-off-by: NThomas Huth <thuth@redhat.com>
      Message-Id: <1519731154-3127-1-git-send-email-thuth@redhat.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      3c4e9baa
    • T
      target/s390x: Remove leading underscores from #defines · adab99be
      Thomas Huth 提交于
      We should not use leading underscores followed by a capital letter
      in #defines since such identifiers are reserved by the C standard.
      
      For ASCE_ORIGIN, REGION_ENTRY_ORIGIN and SEGMENT_ENTRY_ORIGIN I also
      added parentheses around the value to silence an error message from
      checkpatch.pl.
      Signed-off-by: NThomas Huth <thuth@redhat.com>
      Message-Id: <1520227018-4061-1-git-send-email-thuth@redhat.com>
      Reviewed-by: NDavid Hildenbrand <david@redhat.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      adab99be
    • C
      s390/ipl: only print boot menu error if -boot menu=on was specified · 56000869
      Collin L. Walling 提交于
      It is possible that certain QEMU configurations may not
      create an IPLB (such as when -kernel is provided). In
      this case, a misleading error message will be printed
      stating that the "boot menu is not supported for this
      device type".
      
      To amend this, only print this message iff boot menu=on
      was provided on the commandline. Otherwise, return silently.
      
      While we're at it, remove trailing periods from error
      messages.
      Signed-off-by: NCollin L. Walling <walling@linux.vnet.ibm.com>
      Message-Id: <1519760121-24594-1-git-send-email-walling@linux.vnet.ibm.com>
      Reviewed-by: NThomas Huth <thuth@redhat.com>
      Acked-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      56000869
    • T
      hw/s390x/ipl: Bail out if the network bootloader can not be found · c575fa67
      Thomas Huth 提交于
      If QEMU fails to load 's390-netboot.img', the guest firmware currently
      loops forever and just floods the console with "Network boot device
      detected" messages. The code in ipl.c apparently already tried to stop
      the VM with vm_stop() in this case, but this is in vain since the run
      state is later reset due to a call to vm_start() from vl.c again.
      To avoid the ugly firmware loop, let's simply exit QEMU directly instead
      since it just does not make sense to continue if the required firmware
      image can not be loaded. While we're at it, also add the file name of
      the netboot binary to the error message, so that the user has a better
      hint about what is missing.
      Signed-off-by: NThomas Huth <thuth@redhat.com>
      Message-Id: <1519725913-24852-1-git-send-email-thuth@redhat.com>
      Reviewed-by: NDavid Hildenbrand <david@redhat.com>
      Reviewed-by: NFarhan Ali <alifm@linux.vnet.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      c575fa67
    • A
      .shippable.yml: disable powerpc-cross image · b2dba411
      Alex Bennée 提交于
      Something has happened to the old emdebian setup which means it no
      longer builds. Let's disable the shippable builds which are always
      failing.
      Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      b2dba411
    • P
      Merge remote-tracking branch 'remotes/mcayland/tags/qemu-sparc-signed' into staging · 83d2e94c
      Peter Maydell 提交于
      qemu-sparc update
      
      # gpg: Signature made Thu 08 Mar 2018 07:23:01 GMT
      # 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-signed:
        sparc: fix leon3 casa instruction when MMU is disabled
        hw/sparc/sun4m: Fix implicit creation of "-drive if=scsi" devices
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      83d2e94c
    • P
      Merge remote-tracking branch 'remotes/stefanberger/tags/pull-tpm-2018-03-07-1' into staging · 0ab4537f
      Peter Maydell 提交于
      Merge tpm 2018/03/07
      
      # gpg: Signature made Wed 07 Mar 2018 12:42:13 GMT
      # gpg:                using RSA key 75AD65802A0B4211
      # gpg: Good signature from "Stefan Berger <stefanb@linux.vnet.ibm.com>"
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: B818 B9CA DF90 89C2 D5CE  C66B 75AD 6580 2A0B 4211
      
      * remotes/stefanberger/tags/pull-tpm-2018-03-07-1:
        tpm: convert tpm_tis.c to use trace-events
        tpm: convert tpm_emulator.c to use trace-events
        tpm: convert tpm_util.c to use trace-events
        tpm: convert tpm_passthrough.c to use trace-events
        tpm: convert tpm_crb.c to use trace-events
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      0ab4537f
    • P
      Merge remote-tracking branch 'remotes/berrange/tags/qio-next-pull-request' into staging · 3ef91576
      Peter Maydell 提交于
      # gpg: Signature made Wed 07 Mar 2018 11:24:41 GMT
      # gpg:                using RSA key BE86EBB415104FDF
      # gpg: Good signature from "Daniel P. Berrange <dan@berrange.com>"
      # gpg:                 aka "Daniel P. Berrange <berrange@redhat.com>"
      # Primary key fingerprint: DAF3 A6FD B26B 6291 2D0E  8E3F BE86 EBB4 1510 4FDF
      
      * remotes/berrange/tags/qio-next-pull-request:
        qio: non-default context for TLS handshake
        qio: non-default context for async conn
        qio: non-default context for threaded qtask
        qio: store gsources for net listeners
        qio: introduce qio_channel_add_watch_{full|source}
        qio: rename qio_task_thread_result
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      3ef91576
    • P
      Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging · 854a4436
      Peter Maydell 提交于
      Multiboot patches
      
      # gpg: Signature made Wed 07 Mar 2018 11:15:17 GMT
      # gpg:                using RSA key 7F09B272C88F2FD6
      # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"
      # Primary key fingerprint: DC3D EB15 9A9A F95D 3D74  56FE 7F09 B272 C88F 2FD6
      
      * remotes/kevin/tags/for-upstream:
        multiboot: fprintf(stderr...) -> error_report()
        multiboot: Use header names when displaying fields
        multiboot: Remove unused variables from multiboot.c
        multiboot: bss_end_addr can be zero
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      854a4436
    • K
      sparc: fix leon3 casa instruction when MMU is disabled · 6e10f37c
      KONRAD Frederic 提交于
      Since the commit af7a06ba:
      `casa [..](10), .., ..` (and probably others alternate space instructions)
      triggers a data access exception when the MMU is disabled.
      
      When we enter get_asi(...) dc->mem_idx is set to MMU_PHYS_IDX when the MMU
      is disabled. Just keep mem_idx unchanged in this case so we passthrough the
      MMU when it is disabled.
      Signed-off-by: NKONRAD Frederic <frederic.konrad@adacore.com>
      Signed-off-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
      6e10f37c