1. 11 6月, 2014 10 次提交
    • L
      dump: simplify get_len_buf_out() · b87ef351
      Laszlo Ersek 提交于
      We can (and should) rely on the fact that s->flag_compress is exactly one
      of DUMP_DH_COMPRESSED_ZLIB, DUMP_DH_COMPRESSED_LZO, and
      DUMP_DH_COMPRESSED_SNAPPY.
      
      This is ensured by the QMP schema and dump_init() in combination.
      Suggested-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      b87ef351
    • L
      dump: hoist lzo_init() from get_len_buf_out() to dump_init() · c998acb0
      Laszlo Ersek 提交于
      qmp_dump_guest_memory()
        dump_init()
          lzo_init() <---------+
        create_kdump_vmcore()  |
          write_dump_pages()   |
            get_len_buf_out()  |
              lzo_init() ------+
      
      This patch doesn't change the fact that lzo_init() is called for every
      LZO-compressed dump, but it makes get_len_buf_out() more focused (single
      responsibility).
      Suggested-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      c998acb0
    • L
      dump: select header bitness based on ELF class, not ELF architecture · 24aeeace
      Laszlo Ersek 提交于
      The specific ELF architecture (d_machine) carries Too Much Information
      (TM) for deciding between create_header32() and create_header64(), use
      "d_class" instead (ELFCLASS32 vs. ELFCLASS64).
      
      This change adapts write_dump_header() to write_elf_loads(), dump_begin()
      etc. that also rely on the ELF class of the target for bitness selection.
      
      Considering the current targets that support dumping, cpu_get_dump_info()
      works as follows:
      - target-s390x/arch_dump.c: (EM_S390, ELFCLASS64) only
      - target-ppc/arch_dump.c (EM_PPC64, ELFCLASS64) only
      - target-i386/arch_dump.c: sets (EM_X86_64, ELFCLASS64) vs. (EM_386,
        ELFCLASS32) keying off the same Long Mode Active flag.
      
      Hence no observable change.
      Approximately-suggested-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      24aeeace
    • L
      dump: eliminate DumpState.page_size ("guest's page size") · 2f859f80
      Laszlo Ersek 提交于
      Use TARGET_PAGE_SIZE and ~TARGET_PAGE_MASK instead.
      
      "DumpState.page_size" has type "size_t", whereas TARGET_PAGE_SIZE has type
      "int". TARGET_PAGE_MASK is of type "int" and has negative value. The patch
      affects the implicit type conversions as follows:
      
      - create_header32() and create_header64(): assigned to "block_size", which
        has type "uint32_t". No change.
      
      - get_next_page(): "block->target_start", "block->target_end" and "addr"
        have type "hwaddr" (uint64_t).
      
        Before the patch,
        - if "size_t" was "uint64_t", then no additional conversion was done as
          part of the usual arithmetic conversions,
        - If "size_t" was "uint32_t", then it was widened to uint64_t as part of
          the usual arithmetic conversions,
        for the remainder and addition operators.
      
        After the patch,
        - "~TARGET_PAGE_MASK" expands to  ~~((1 << TARGET_PAGE_BITS) - 1). It
          has type "int" and positive value (only least significant bits set).
          That's converted (widened) to "uint64_t" for the bit-ands. No visible
          change.
        - The same holds for the (addr + TARGET_PAGE_SIZE) addition.
      
      - write_dump_pages():
        - TARGET_PAGE_SIZE passed as argument to a bunch of functions that all
          have prototypes. No change.
      
        - When incrementing "offset_data" (of type "off_t"): given that we never
          build for ILP32_OFF32 (see "-D_FILE_OFFSET_BITS=64" in configure),
          "off_t" is always "int64_t", and we only need to consider:
          - ILP32_OFFBIG: "size_t" is "uint32_t".
            - before: int64_t += uint32_t. Page size converted to int64_t for
              the addition.
            - after:  int64_t += int32_t. No change.
          - LP64_OFF64: "size_t" is "uint64_t".
            - before: int64_t += uint64_t. Offset converted to uint64_t for the
              addition, then the uint64_t result is converted to int64_t for
              storage.
            - after:  int64_t += int32_t. Same as the ILP32_OFFBIG/after case.
              No visible change.
      
        - (size_out < s->page_size) comparisons, and (size_out = s->page_size)
          assignment:
          - before: "size_out" is of type "size_t", no implicit conversion for
                    either operator.
          - after: TARGET_PAGE_SIZE (of type "int" and positive value) is
                   converted to "size_t" (for the relop because the latter is
                   one of "uint32_t" and "uint64_t"). No visible change.
      
      - dump_init():
        - DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), s->page_size): The
          innermost "DumpState.max_mapnr" field has type uint64_t, which
          propagates through all implicit conversions at hand:
      
          #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
      
          regardless of the page size macro argument's type. In the outer macro
          replacement, the page size is converted from uint32_t and int32_t
          alike to uint64_t.
      
        - (tmp * s->page_size) multiplication: "tmp" has size "uint64_t"; the
          RHS is converted to that type from uint32_t and int32_t just the same
          if it's not uint64_t to begin with.
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      2f859f80
    • L
      dump: eliminate DumpState.page_shift ("guest's page shift") · 22227f12
      Laszlo Ersek 提交于
      Just use TARGET_PAGE_BITS.
      
      "DumpState.page_shift" used to have type "uint32_t", while the replacement
      TARGET_PAGE_BITS has type "int". Since "DumpState.page_shift" was only
      used as bit shift counts in the paddr_to_pfn() and pfn_to_paddr() macros,
      this is safe.
      Suggested-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      22227f12
    • L
      dump: simplify write_start_flat_header() · 92ba1401
      Laszlo Ersek 提交于
      Currently, the function
      - defines and populates an auto variable of type MakedumpfileHeader
      - allocates and zeroes a buffer of size MAX_SIZE_MDF_HEADER (4096)
      - copies the former into the latter (covering an initial portion of the
        latter)
      
      Fill in the MakedumpfileHeader structure in its final place (the alignment
      is OK because the structure lives at the address returned by g_malloc0()).
      Approximately-suggested-by: NLuiz Capitulino <lcapitulino@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      92ba1401
    • L
      dump: fill in the flat header signature more pleasingly to the eye · ae3f88f6
      Laszlo Ersek 提交于
      The "mh.signature" array field has size 16, and is zeroed by the preceding
      memset(). MAKEDUMPFILE_SIGNATURE expands to a string literal with string
      length 12 (size 13). There's no need to measure the length of
      MAKEDUMPFILE_SIGNATURE at runtime, nor for the extra zero-filling of
      "mh.signature" with strncpy().
      
      Use memcpy() with MIN(sizeof, sizeof) for robustness (which is an integer
      constant expression, evaluable at compile time.)
      Approximately-suggested-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      ae3f88f6
    • P
      Merge remote-tracking branch 'remotes/mjt/tags/trivial-patches-2014-06-10' into staging · b780bf8e
      Peter Maydell 提交于
      trivial patches for 2014-06-10
      
      # gpg: Signature made Tue 10 Jun 2014 17:07:19 BST using RSA key ID A4C3D7DB
      # gpg: Good signature from "Michael Tokarev <mjt@tls.msk.ru>"
      # gpg:                 aka "Michael Tokarev <mjt@corpit.ru>"
      # gpg:                 aka "Michael Tokarev <mjt@debian.org>"
      # 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: 6EE1 95D1 886E 8FFB 810D  4324 457C E0A0 8044 65C5
      #      Subkey fingerprint: 6F67 E18E 7C91 C5B1 5514  66A7 BEE5 9D74 A4C3 D7DB
      
      * remotes/mjt/tags/trivial-patches-2014-06-10: (25 commits)
        virtio.c: fix error message
        hw: vmware_vga: don't return cursorx when the driver asks for cursory register
        migration: Plug memory leak in migrate-set-cache-size command
        libcacard: Clean up dead stores before g_free()
        libcacard: Drop superfluous conditionals around g_free()
        cpu/x86: correctly set errors in x86_cpu_parse_featurestr
        smbios: use g_free directly on NULL pointers
        vdi: remove double conversion
        apb: Fix compiler warnings (large constants)
        hw/net/ne2000-isa: Register vmstate struct
        target-microblaze: Delete unused sign_extend() function
        hw/misc/milkymist-softusb: Remove unused softusb_{read, write}_pmem()
        target-i386/translate.c: Remove unused tcg_gen_lshift()
        hw/isa/pc87312: Remove unused function is_parallel_epp()
        hw/intc/openpic: Remove unused function IRQ_testbit()
        hw/dma/xilinx_axidma: Remove unused stream_halted() function
        util/qemu-sockets.c: Avoid unused variable warnings
        hw/sd/sd.c: Drop unused sd_acmd_type[] array
        hw/i386/pc.c: Remove unused parallel_io and parallel_irq variables
        slirp: Remove unused zero_ethaddr[] variable
        ...
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      b780bf8e
    • M
      virtio.c: fix error message · 1a285899
      Michael Tokarev 提交于
      Suggested-by: NPeter Maydell <peter.maydell@linaro.org>
      Signed-off-by: NMichael Tokarev <mjt@tls.msk.ru>
      1a285899
    • N
      hw: vmware_vga: don't return cursorx when the driver asks for cursory register · e2bb4ae7
      Nicolas Owens 提交于
      hello qemu-*@nongnu.org, this is my first contribution. apologies if
      something is incorrect.
      
      this patch fixes vmware_vga.c so that it actually returns the cursory
      register when asked for, instead of cursorx.
      Signed-off-by: NNicolas Owens <mischief@offblast.org>
      Signed-off-by: NMichael Tokarev <mjt@tls.msk.ru>
      e2bb4ae7
  2. 10 6月, 2014 30 次提交