1. 22 2月, 2017 1 次提交
    • P
      loader: Support Flattened Image Trees (FIT images) · 51b58561
      Paul Burton 提交于
      Introduce support for loading Flattened Image Trees, as used by modern
      U-Boot. FIT images are essentially flattened device tree files which
      contain binary images such as kernels, FDTs or ramdisks along with one
      or more configuration nodes describing boot configurations.
      
      The MIPS Boston board typically boots kernels in the form of FIT images,
      and will make use of this code.
      Signed-off-by: NPaul Burton <paul.burton@imgtec.com>
      [yongbok.kim@imgtec.com:
        fixed potential memory leaks,
        isolated building option]
      Signed-off-by: NYongbok Kim <yongbok.kim@imgtec.com>
      51b58561
  2. 19 1月, 2017 1 次提交
  3. 30 11月, 2016 2 次提交
    • L
      loader: fix undefined behavior in rom_order_compare() · 1b57bd4f
      Laszlo Ersek 提交于
      According to ISO C99 / N1256 (referenced in HACKING):
      
      > 6.5.8 Relational operators
      >
      > 4 For the purposes of these operators, a pointer to an object that is
      >   not an element of an array behaves the same as a pointer to the first
      >   element of an array of length one with the type of the object as its
      >   element type.
      >
      > 5 When two pointers are compared, the result depends on the relative
      >   locations in the address space of the objects pointed to. If two
      >   pointers to object or incomplete types both point to the same object,
      >   or both point one past the last element of the same array object, they
      >   compare equal. If the objects pointed to are members of the same
      >   aggregate object, pointers to structure members declared later compare
      >   greater than pointers to members declared earlier in the structure,
      >   and pointers to array elements with larger subscript values compare
      >   greater than pointers to elements of the same array with lower
      >   subscript values. All pointers to members of the same union object
      >   compare equal. If the expression /P/ points to an element of an array
      >   object and the expression /Q/ points to the last element of the same
      >   array object, the pointer expression /Q+1/ compares greater than /P/.
      >   In all other cases, the behavior is undefined.
      
      Our AddressSpace objects are allocated generally individually, and kept in
      the "address_spaces" linked list, so we mustn't compare their addresses
      with relops.
      
      Convert the pointers subjected to the relop in rom_order_compare() to
      "uintptr_t":
      
      > 7.18.1.4 Integer types capable of holding object pointers
      >
      > 1 [...]
      >
      >   The following type designates an unsigned integer type with the
      >   property that any valid pointer to void can be converted to this type,
      >   then converted back to pointer to void, and the result will compare
      >   equal to the original pointer:
      >
      >   /uintptr_t/
      >
      >   These types are optional.
      
      Cc: "Michael S. Tsirkin" <mst@redhat.com>
      Cc: Alistair Francis <alistair.francis@xilinx.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Maydell <peter.maydell@linaro.org>
      Cc: qemu-devel@nongnu.org
      Fixes: 3e76099aSigned-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NAlistair Francis <alistair.francis@xilinx.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      1b57bd4f
    • L
      loader: fix handling of custom address spaces when adding ROM blobs · aa6c6ae8
      Laszlo Ersek 提交于
      * Commit 3e76099a ("loader: Allow a custom AddressSpace when loading
        ROMs") introduced the "Rom.as" field:
      
        (1) It modified the utility callers of rom_insert() to take "as" as a
            new parameter from *their* callers, and set "rom->as" from that
            parameter. The functions covered were rom_add_file() and
            rom_add_elf_program().
      
        (2) It also modified rom_insert() itself, to auto-assign
            "&address_space_memory", in case the external caller passed -- and
            the utility caller forwarded -- as=NULL.
      
        Except, commit 3e76099a forgot to update the third utility caller of
        rom_insert(), under point (1), namely rom_add_blob().
      
      * Later, commit 5e774eb3 ("loader: Add AddressSpace loading support
        to uImages") added the load_uimage_as() function, and the
        rom_add_blob_fixed_as() function-like macro, with the necessary changes
        elsewhere to propagate the new "as" parameter to rom_add_blob():
      
          load_uimage_as()
            load_uboot_image()
              rom_add_blob_fixed_as()
                rom_add_blob()
      
        At this point, the signature (and workings) of rom_add_blob() had been
        broken already, and the rom_add_blob_fixed_as() macro passed its "_as"
        parameter to rom_add_blob() as "callback_opaque". Given that the
        "fw_callback" parameter itself was set to NULL (correctly), this did no
        additional damage (the opaque arg would never be used), but ultimately
        it broke the new functionality of load_uimage_as().
      
      * The load_uimage_as() function would be put to use in one of the later
        patches, commit e481a1f6 ("generic-loader: Add a generic loader").
      
      * We can fix this only in a unified patch now. Append "AddressSpace *as"
        to the signature of rom_add_blob(), and handle the new parameter. Pass
        NULL from all current callers, except from rom_add_blob_fixed_as(),
        where "_as" has to be bumped to the proper position.
      
      * Note that rom_add_file() rejects the case when both "mr" and "as" are
        passed in as non-NULL. The action that this is apparently supposed to
        prevent is the
      
          rom->mr = mr;
      
        assignment (that's the only place where the "mr" parameter is used in
        rom_add_file()). In rom_add_blob() though, we have no "mr" parameter,
        and the actions done on the fw_cfg branch:
      
          if (fw_file_name && fw_cfg) {
              if (mc->rom_file_has_mr) {
                  data = rom_set_mr(rom, OBJECT(fw_cfg), devpath);
                  mr = rom->mr;
              } else {
                  data = rom->data;
              }
      
        reflect those that are performed by rom_add_file() too (with mr==NULL):
      
          if (rom->fw_file && fw_cfg) {
              if ((!option_rom || mc->option_rom_has_mr) &&
                  mc->rom_file_has_mr) {
                  data = rom_set_mr(rom, OBJECT(fw_cfg), devpath);
              } else {
                  data = rom->data;
              }
      
        Hence we need no additional restrictions in rom_add_blob().
      
      * Stable is not affected as both problematic commits appeared first in
        v2.8.0-rc0.
      
      Cc: "Michael S. Tsirkin" <mst@redhat.com>
      Cc: Alistair Francis <alistair.francis@xilinx.com>
      Cc: Igor Mammedov <imammedo@redhat.com>
      Cc: Michael Walle <michael@walle.cc>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Maydell <peter.maydell@linaro.org>
      Cc: Shannon Zhao <zhaoshenglong@huawei.com>
      Cc: qemu-arm@nongnu.org
      Cc: qemu-devel@nongnu.org
      Fixes: 3e76099a
      Fixes: 5e774eb3Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NAlistair Francis <alistair.francis@xilinx.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      aa6c6ae8
  4. 23 9月, 2016 5 次提交
  5. 18 5月, 2016 1 次提交
  6. 08 4月, 2016 1 次提交
    • G
      Sort the fw_cfg file list · bab47d9a
      Gerd Hoffmann 提交于
      Entries are inserted in filename order instead of being
      appended to the end in case sorting is enabled.
      
      This will avoid any future issues of moving the file creation
      around, it doesn't matter what order they are created now,
      the will always be in filename order.
      Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
      
      Added machine type handling for compatibility.  This was
      a fairly complex change, this will preserve the order of fw_cfg
      for older versions no matter what order the firmware files
      actually come in.  A list is kept of the correct legacy order
      and the entries will be inserted based upon their order in
      the list.  Except that some entries are ordered (in a specific
      area of the list) based upon what order they appear on the
      command line.  Special handling is added for those entries.
      Signed-off-by: NCorey Minyard <cminyard@mvista.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      bab47d9a
  7. 23 3月, 2016 2 次提交
    • V
      util: move declarations out of qemu-common.h · f348b6d1
      Veronia Bahaa 提交于
      Move declarations out of qemu-common.h for functions declared in
      utils/ files: e.g. include/qemu/path.h for utils/path.c.
      Move inline functions out of qemu-common.h and into new files (e.g.
      include/qemu/bcd.h)
      Signed-off-by: NVeronia Bahaa <veroniabahaa@gmail.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      f348b6d1
    • M
      include/qemu/osdep.h: Don't include qapi/error.h · da34e65c
      Markus Armbruster 提交于
      Commit 57cb38b3 included qapi/error.h into qemu/osdep.h to get the
      Error typedef.  Since then, we've moved to include qemu/osdep.h
      everywhere.  Its file comment explains: "To avoid getting into
      possible circular include dependencies, this file should not include
      any other QEMU headers, with the exceptions of config-host.h,
      compiler.h, os-posix.h and os-win32.h, all of which are doing a
      similar job to this file and are under similar constraints."
      qapi/error.h doesn't do a similar job, and it doesn't adhere to
      similar constraints: it includes qapi-types.h.  That's in excess of
      100KiB of crap most .c files don't actually need.
      
      Add the typedef to qemu/typedefs.h, and include that instead of
      qapi/error.h.  Include qapi/error.h in .c files that need it and don't
      get it now.  Include qapi-types.h in qom/object.h for uint16List.
      
      Update scripts/clean-includes accordingly.  Update it further to match
      reality: replace config.h by config-target.h, add sysemu/os-posix.h,
      sysemu/os-win32.h.  Update the list of includes in the qemu/osdep.h
      comment quoted above similarly.
      
      This reduces the number of objects depending on qapi/error.h from "all
      of them" to less than a third.  Unfortunately, the number depending on
      qapi-types.h shrinks only a little.  More work is needed for that one.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      [Fix compilation without the spice devel packages. - Paolo]
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      da34e65c
  8. 04 3月, 2016 3 次提交
  9. 29 1月, 2016 1 次提交
  10. 22 12月, 2015 1 次提交
  11. 18 9月, 2015 1 次提交
  12. 11 9月, 2015 1 次提交
  13. 07 7月, 2015 1 次提交
    • E
      vl: move rom_load_all after machine init done · 6b3f7f63
      Eric Auger 提交于
      On ARM, commit ac9d32e3 postponed the
      memory preparation for boot until the machine init done notifier. This
      has for consequence to insert ROM at machine init done time.
      
      However the rom_load_all function stayed called before the ROM are
      inserted. As a consequence the rom_load_all function does not do
      everything it is expected to do, on ARM.
      
      It currently registers the ROM reset notifier but does not iterate through
      the registered ROM list. the isrom field is not set properly. This latter
      is used to report info in the monitor and also to decide whether the
      rom->data can be freed on ROM reset notifier.
      
      To fix that regression the patch moves the rom_load_all call after
      machine init done. We also take the opportunity to rename the rom_load_all
      function into rom_check_and_resgister_reset() and integrate the
      rom_load_done in it.
      Signed-off-by: NEric Auger <eric.auger@linaro.org>
      Reported-by: NPeter Crosthwaite <peter.crosthwaite@xilinx.com>
      Message-Id: <1434470874-22573-1-git-send-email-eric.auger@linaro.org>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      6b3f7f63
  14. 28 4月, 2015 1 次提交
  15. 19 3月, 2015 1 次提交
  16. 10 3月, 2015 1 次提交
  17. 18 2月, 2015 1 次提交
    • M
      hmp: Name HMP info handler functions hmp_info_SUBCOMMAND() · 1ce6be24
      Markus Armbruster 提交于
      Some are called do_info_SUBCOMMAND() (old ones, usually), some
      hmp_info_SUBCOMMAND(), some SUBCOMMAND_info(), sometimes SUBCOMMAND
      pointlessly differs in spelling.
      
      Normalize to hmp_info_SUBCOMMAND(), where SUBCOMMAND is exactly the
      subcommand name with '-' replaced by '_'.
      
      Exceptions:
      
      * sun4m_irq_info(), sun4m_pic_info() renamed to sun4m_hmp_info_irq(),
        sun4m_hmp_info_pic().
      
      * lm32_irq_info(), lm32_pic_info() renamed to lm32_hmp_info_irq(),
        lm32_hmp_info_pic().
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      1ce6be24
  18. 08 1月, 2015 1 次提交
  19. 23 12月, 2014 1 次提交
  20. 25 11月, 2014 1 次提交
  21. 17 11月, 2014 1 次提交
  22. 03 11月, 2014 1 次提交
    • M
      hw/core/loader: implement address translation in uimage loader · 25bda50a
      Max Filippov 提交于
      Such address translation is needed when load address recorded in uImage
      is a virtual address. When the actual load address is requested, return
      untranslated address: user that needs the translated address can always
      apply translation function to it and those that need it untranslated
      don't need to do the inverse translation.
      
      Add translation function pointer and its parameter to uimage_load
      prototype. Update all existing users.
      
      No user-visible functional changes.
      
      Cc: qemu-stable@nongnu.org
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      Reviewed-by: NAlexander Graf <agraf@suse.de>
      25bda50a
  23. 09 9月, 2014 1 次提交
  24. 08 9月, 2014 1 次提交
  25. 20 8月, 2014 1 次提交
  26. 18 8月, 2014 1 次提交
  27. 11 3月, 2014 1 次提交
    • M
      pc: avoid duplicate names for ROM MRs · ac41881b
      Michael S. Tsirkin 提交于
      Since
      commit 04920fc0
          loader: store FW CFG ROM files in RAM
      RAM MRs including ROM files in FW CFGs are created
      and named using the file basename.
      
      This becomes problematic if these names are
      supplied by user, since the basename might not
      be unique.
      
      There are two cases we care about:
      - option-rom flag.
      - option ROM for devices. This triggers e.g. when
        using rombar=0.
      
      At the moment we get an assert. E.g
      qemu -option-rom /usr/share/ipxe/8086100e.rom -option-rom
      /usr/share/ipxe.efi/8086100e.rom
      RAMBlock "/rom@genroms/8086100e.rom" already registered, abort!
      
      This is a regression from 1.6.
      
      For now let's keep it simple and just avoid creating the
      MRs in case of option ROMs.
      
      when using 1.7 machine types, enable
      option ROMs in RAM to match that version.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      ac41881b
  28. 10 3月, 2014 1 次提交
  29. 05 3月, 2014 1 次提交
    • A
      elf-loader: add more return codes · 18674b26
      Alexey Kardashevskiy 提交于
      The existing load_elf() just returns -1 if it fails to load ELF. However
      it could be smarter than this and tell more about the failure such as
      wrong endianness or incompatible platform.
      
      This adds additional return codes for wrong architecture, wrong
      endianness and if the image is not ELF at all.
      
      This adds a load_elf_strerror() helper to convert return codes into
      string messages.
      
      This fixes handling of what load_elf() returns for s390x, other
      callers just check the return value for <0 and this remains unchanged.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      18674b26
  30. 11 2月, 2014 1 次提交
  31. 20 12月, 2013 1 次提交
    • A
      roms: Flush icache when writing roms to guest memory · 582b55a9
      Alexander Graf 提交于
      We use the rom infrastructure to write firmware and/or initial kernel
      blobs into guest address space. So we're basically emulating the cache
      off phase on very early system bootup.
      
      That phase is usually responsible for clearing the instruction cache for
      anything it writes into cachable memory, to ensure that after reboot we
      don't happen to execute stale bits from the instruction cache.
      
      So we need to invalidate the icache every time we write a rom into guest
      address space. We do not need to do this for every DMA since the guest
      expects it has to flush the icache manually in that case.
      
      This fixes random reboot issues on e5500 (booke ppc) for me.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      582b55a9
  32. 13 12月, 2013 1 次提交
    • A
      roms: Flush icache when writing roms to guest memory · a94b36dd
      Alexander Graf 提交于
      We use the rom infrastructure to write firmware and/or initial kernel
      blobs into guest address space. So we're basically emulating the cache
      off phase on very early system bootup.
      
      That phase is usually responsible for clearing the instruction cache for
      anything it writes into cachable memory, to ensure that after reboot we
      don't happen to execute stale bits from the instruction cache.
      
      So we need to invalidate the icache every time we write a rom into guest
      address space. We do not need to do this for every DMA since the guest
      expects it has to flush the icache manually in that case.
      
      This fixes random reboot issues on e5500 (booke ppc) for me.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      a94b36dd