You need to sign in or sign up before continuing.
  1. 20 1月, 2015 8 次提交
  2. 08 1月, 2015 5 次提交
  3. 03 1月, 2015 1 次提交
  4. 23 12月, 2014 1 次提交
  5. 17 12月, 2014 1 次提交
  6. 16 12月, 2014 3 次提交
  7. 15 12月, 2014 1 次提交
  8. 11 12月, 2014 1 次提交
    • L
      Add the "-semihosting-config" option. · a38bb079
      Liviu Ionescu 提交于
      The usual semihosting behaviour is to process the system calls locally and
      return; unfortuantelly the initial implementation dinamically changed the
      target to GDB during debug sessions, which, for the usual arm-none-eabi-gdb,
      is not implemented. The result was that during debug sessions the semihosting
      calls were discarded.
      
      This patch adds a configuration variable and an option to set it on the
      command line:
      
          -semihosting-config [enable=on|off,]target=native|gdb|auto
      
      This option enables semihosting and defines where the semihosting calls will
      be addressed, to QEMU ('native') or to GDB ('gdb'). The default is auto, which
      means 'gdb' during debug sessions and 'native' otherwise.
      Signed-off-by: NLiviu Ionescu <ilg@livius.net>
      Message-id: 1416341957-9796-1-git-send-email-ilg@livius.net
      [PMM: moved declaration and definition of semihosting_target to
       gdbstub.h and gdbstub.c to fix build failure on linux-user]
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      a38bb079
  9. 23 11月, 2014 1 次提交
  10. 18 11月, 2014 1 次提交
    • P
      exec: Handle multipage ranges in invalidate_and_set_dirty() · f874bf90
      Peter Maydell 提交于
      The code in invalidate_and_set_dirty() needs to handle addr/length
      combinations which cross guest physical page boundaries. This can happen,
      for example, when disk I/O reads large blocks into guest RAM which previously
      held code that we have cached translations for. Unfortunately we were only
      checking the clean/dirty status of the first page in the range, and then
      were calling a tb_invalidate function which only handles ranges that don't
      cross page boundaries. Fix the function to deal with multipage ranges.
      
      The symptoms of this bug were that guest code would misbehave (eg segfault),
      in particular after a guest reboot but potentially any time the guest
      reused a page of its physical RAM for new code.
      
      Cc: qemu-stable@nongnu.org
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1416167061-13203-1-git-send-email-peter.maydell@linaro.org
      f874bf90
  11. 03 11月, 2014 1 次提交
  12. 31 10月, 2014 1 次提交
  13. 07 10月, 2014 1 次提交
  14. 12 9月, 2014 1 次提交
  15. 09 9月, 2014 3 次提交
  16. 02 9月, 2014 1 次提交
    • X
      implementing victim TLB for QEMU system emulated TLB · 88e89a57
      Xin Tong 提交于
      QEMU system mode page table walks are expensive. Taken by running QEMU
      qemu-system-x86_64 system mode on Intel PIN , a TLB miss and walking a
      4-level page tables in guest Linux OS takes ~450 X86 instructions on
      average.
      
      QEMU system mode TLB is implemented using a directly-mapped hashtable.
      This structure suffers from conflict misses. Increasing the
      associativity of the TLB may not be the solution to conflict misses as
      all the ways may have to be walked in serial.
      
      A victim TLB is a TLB used to hold translations evicted from the
      primary TLB upon replacement. The victim TLB lies between the main TLB
      and its refill path. Victim TLB is of greater associativity (fully
      associative in this patch). It takes longer to lookup the victim TLB,
      but its likely better than a full page table walk. The memory
      translation path is changed as follows :
      
      Before Victim TLB:
      1. Inline TLB lookup
      2. Exit code cache on TLB miss.
      3. Check for unaligned, IO accesses
      4. TLB refill.
      5. Do the memory access.
      6. Return to code cache.
      
      After Victim TLB:
      1. Inline TLB lookup
      2. Exit code cache on TLB miss.
      3. Check for unaligned, IO accesses
      4. Victim TLB lookup.
      5. If victim TLB misses, TLB refill
      6. Do the memory access.
      7. Return to code cache
      
      The advantage is that victim TLB can offer more associativity to a
      directly mapped TLB and thus potentially fewer page table walks while
      still keeping the time taken to flush within reasonable limits.
      However, placing a victim TLB before the refill path increase TLB
      refill path as the victim TLB is consulted before the TLB refill. The
      performance results demonstrate that the pros outweigh the cons.
      
      some performance results taken on SPECINT2006 train
      datasets and kernel boot and qemu configure script on an
      Intel(R) Xeon(R) CPU  E5620  @ 2.40GHz Linux machine are shown in the
      Google Doc link below.
      
      https://docs.google.com/spreadsheets/d/1eiItzekZwNQOal_h-5iJmC4tMDi051m9qidi5_nwvH4/edit?usp=sharing
      
      In summary, victim TLB improves the performance of qemu-system-x86_64 by
      11% on average on SPECINT2006, kernelboot and qemu configscript and with
      highest improvement of in 26% in 456.hmmer. And victim TLB does not result
      in any performance degradation in any of the measured benchmarks. Furthermore,
      the implemented victim TLB is architecture independent and is expected to
      benefit other architectures in QEMU as well.
      
      Although there are measurement fluctuations, the performance
      improvement is very significant and by no means in the range of
      noises.
      Signed-off-by: NXin Tong <trent.tong@gmail.com>
      Message-id: 1407202523-23553-1-git-send-email-trent.tong@gmail.com
      Reviewed-by: NPeter Maydell <peter.maydell@linaro.org>
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      88e89a57
  17. 29 8月, 2014 1 次提交
  18. 22 8月, 2014 1 次提交
  19. 20 8月, 2014 1 次提交
  20. 18 8月, 2014 3 次提交
  21. 12 8月, 2014 1 次提交
  22. 22 7月, 2014 1 次提交
    • P
      exec: fix migration with devices that use address_space_rw · 6886867e
      Paolo Bonzini 提交于
      Devices that use address_space_rw to write large areas to memory
      (as opposed to address_space_map/unmap) were broken with respect
      to migration since fe680d0d (exec: Limit translation limiting in
      address_space_translate to xen, 2014-05-07).  Such devices include
      IDE CD-ROMs.
      
      The reason is that invalidate_and_set_dirty (called by address_space_rw
      but not address_space_map/unmap) was only setting the dirty bit for
      the first page in the translation.
      
      To fix this, introduce cpu_physical_memory_set_dirty_range_nocode that
      is the same as cpu_physical_memory_set_dirty_range except it does not
      muck with the DIRTY_MEMORY_CODE bitmap.  This function can be used if
      the caller invalidates translations with tb_invalidate_phys_page_range.
      
      There is another difference between cpu_physical_memory_set_dirty_range
      and cpu_physical_memory_set_dirty_flag; the former includes a call
      to xen_modified_memory.  This is handled separately in
      invalidate_and_set_dirty, and is not needed in other callers of
      cpu_physical_memory_set_dirty_range_nocode, so leave it alone.
      
      Just one nit: now that invalidate_and_set_dirty takes care of handling
      multiple pages, there is no need for address_space_unmap to wrap it
      in a loop.  In fact that loop would now be O(n^2).
      Reported-by: NDave Gilbert <dgilbert@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Tested-by: NGerd Hoffmann <kraxel@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      6886867e
  23. 01 7月, 2014 1 次提交