Commit Graph

46954 Commits

Author SHA1 Message Date
Peter Maydell 435da5e709 linux-user: Use safe_syscall wrapper for fcntl
Use the safe_syscall wrapper for fcntl. This is straightforward now
that we always use 'struct fcntl64' on the host, as we don't need
to select whether to call the host's fcntl64 or fcntl syscall
(a detail that the libc previously hid for us).

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
2016-06-26 13:17:20 +03:00
Peter Maydell 213d3e9ea2 linux-user: Use __get_user() and __put_user() to handle structs in do_fcntl()
Use the __get_user() and __put_user() to handle reading and writing the
guest structures in do_ioctl(). This has two benefits:
 * avoids possible errors due to misaligned guest pointers
 * correctly sign extends signed fields (like l_start in struct flock)
   which might be different sizes between guest and host

To do this we abstract out into copy_from/to_user functions. We
also standardize on always using host flock64 and the F_GETLK64
etc flock commands, as this means we always have 64 bit offsets
whether the host is 64-bit or 32-bit and we don't need to support
conversion to both host struct flock and struct flock64.

In passing we fix errors in converting l_type from the host to
the target (where we were doing a byteswap of the host value
before trying to do the convert-bitmasks operation rather than
otherwise, and inexplicably shifting left by 1); these were
accidentally left over when the original simple "just shift by 1"
arm<->x86 conversion of commit 43f238d was changed to the more
general scheme of using target_to_host_bitmask() functions in 2ba7f73.

[RV: fixed ifdef guard for eabi functions]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
2016-06-26 13:16:41 +03:00
Artyom Tarasenko b64d2e57e7 target-sparc: fix register corruption in ldstub if there is no write permission
Signed-off-by: Artyom Tarasenko <atar4qemu@gmail.com>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2016-06-24 18:18:32 +01:00
Aleksandar Markovic 77be419980 target-mips: Add FCR31's FS bit definition
Add preprocessor definition of FCR31's FS bit, and update related
code for setting this bit.

Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:43:53 +01:00
Aleksandar Markovic 599bc5e89c target-mips: Implement FCR31's R/W bitmask and related functionalities
This patch implements read and write access rules for Mips floating
point control and status register (FCR31). The change can be divided
into following parts:

- Add fields that will keep FCR31's R/W bitmask in procesor
  definitions and processor float_status structure.

- Add appropriate value for FCR31's R/W bitmask for each supported
  processor.

- Add function for setting snan_bit_is_one, and integrate it in
  appropriate places.

- Modify handling of CTC1 (case 31) instruction to use FCR31's R/W
  bitmask.

- Modify handling user mode executables for Mips, in relation to the
  bit EF_MIPS_NAN2008 from ELF header, that is in turn related to
  reading and writing to FCR31.

- Modify gdb behavior in relation to FCR31.

Signed-off-by: Thomas Schwinge <thomas@codesourcery.com>
Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:43:52 +01:00
Aleksandar Markovic 87552089b6 target-mips: Add nan2008 flavor of <CEIL|CVT|FLOOR|ROUND|TRUNC>.<L|W>.<S|D>
New set of helpers for handling nan2008-syle versions of instructions
<CEIL|CVT|FLOOR|ROUND|TRUNC>.<L|W>.<S|D>, for Mips R6.

All involved instructions have float operand and integer result. Their
core functionality is implemented via invocations of appropriate SoftFloat
functions. The problematic cases are when the operand is a NaN, and also
when the operand (float) is out of the range of the result.

Here one can distinguish three cases:

CASE MIPS-A: (FCR31.NAN2008 == 1)

   1. Operand is a NaN, result should be 0;
   2. Operand is larger than INT_MAX, result should be INT_MAX;
   3. Operand is smaller than INT_MIN, result should be INT_MIN.

CASE MIPS-B: (FCR31.NAN2008 == 0)

   1. Operand is a NaN, result should be INT_MAX;
   2. Operand is larger than INT_MAX, result should be INT_MAX;
   3. Operand is smaller than INT_MIN, result should be INT_MAX.

CASE SoftFloat:

   1. Operand is a NaN, result is INT_MAX;
   2. Operand is larger than INT_MAX, result is INT_MAX;
   3. Operand is smaller than INT_MIN, result is INT_MIN.

Current implementation of <CEIL|CVT|FLOOR|ROUND|TRUNC>.<L|W>.<S|D>
implements case MIPS-B. This patch relates to case MIPS-A. For case
MIPS-A, only return value for NaN-operands should be corrected after
appropriate SoftFloat library function is called.

Related MSA instructions FTRUNC_S and FTINT_S already handle well
all cases, in the fashion similar to the code from this patch.

Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
[leon.alrae@imgtec.com:
 * removed a statement from the description which caused slight confusion]
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:41:47 +01:00
Aleksandar Markovic 6be7748005 target-mips: Add abs2008 flavor of <ABS|NEG>.<S|D>
Updated handling of instructions <ABS|NEG>.<S|D>. Note that legacy
(pre-abs2008) ABS and NEG instructions are arithmetic (and, therefore,
any NaN operand causes signaling invalid operation), while abs2008
ones are non-arithmetic, always and only changing the sign bit, even
for NaN-like operands. Details on these instructions are documented
in [1] p. 35 and 359.

Implementation-wise, abs2008 versions are implemented without helpers,
for simplicity and performance sake.

[1] "MIPS Architecture For Programmers Volume II-A:
    The MIPS64 Instruction Set Reference Manual",
    Imagination Technologies LTD, Revision 6.04, November 13, 2015

Signed-off-by: Thomas Schwinge <thomas@codesourcery.com>
Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:41:46 +01:00
Aleksandar Markovic 40bd6dd456 target-mips: Activate IEEE 754-2008 signaling NaN bit meaning for MSA
Function msa_reset() is updated so that flag snan_bit_is_one is
properly set to 0.

By applying this patch, a number of incorrect MSA behaviors that
require IEEE 754-2008 compliance will be fixed. Those are behaviors
that (up to the moment of applying this patch) did not get the desired
functionality from SoftFloat library with respect to distinguishing
between quiet and signaling NaN, getting default NaN values (both
quiet and signaling), establishing if a floating point number is NaN
or not, etc.

Two examples:

* FMAX, FMIN will now correctly detect and propagate NaNs.
* FCLASS.D ans FCLASS.S will now correcty detect NaN flavors.

Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:41:45 +01:00
Aleksandar Markovic 52d4c8ee93 linux-user: Update preprocessor constants for Mips-specific e_flags bits
Missing values EF_MIPS_FP64 and EF_MIPS_NAN2008 added.

Signed-off-by: Thomas Schwinge <thomas@codesourcery.com>
Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:41:45 +01:00
Aleksandar Markovic c27644f0e9 softfloat: Handle snan_bit_is_one == 0 in MIPS pickNaNMulAdd()
Only for Mips platform, and only for cases when snan_bit_is_one is 0,
correct the order of argument comparisons in pickNaNMulAdd().

For more info, see [1], page 53, section "3.5.3 NaN Propagation".

[1] "MIPS Architecture for Programmers Volume IV-j:
    The MIPS32 SIMD Architecture Module",
    Imagination Technologies LTD, Revision 1.12, February 3, 2016

Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
[leon.alrae@imgtec.com:
 * reworded the subject of the patch
 * swapped if/else code blocks to match the commit description]
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:41:32 +01:00
Aleksandar Markovic a7c04d545a softfloat: For Mips only, correct default NaN values
Only for Mips platform, and only for cases when snan_bit_is_one is 0,
correct default NaN values (in their 16-, 32-, and 64-bit flavors).

For more info, see [1], page 84, Table 6.3 "Value Supplied When a New
Quiet NaN Is Created", and [2], page 52, Table 3.7 "Default NaN
Encodings".

[1] "MIPS Architecture For Programmers Volume II-A:
    The MIPS64 Instruction Set Reference Manual",
    Imagination Technologies LTD, Revision 6.04, November 13, 2015

[2] "MIPS Architecture for Programmers Volume IV-j:
    The MIPS32 SIMD Architecture Module",
    Imagination Technologies LTD, Revision 1.12, February 3, 2016

Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:41:31 +01:00
Aleksandar Markovic a59eaea646 softfloat: Clean code format in fpu/softfloat-specialize.h
fpu/softfloat-specialize.h is the most critical file in SoftFloat
library, since it handles numerous differences between platforms in
relation to floating point arithmetics. This patch makes the code
in this file more consistent format-wise, and hopefully easier to
debug and maintain.

Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:41:30 +01:00
Aleksandar Markovic af39bc8c49 softfloat: Implement run-time-configurable meaning of signaling NaN bit
This patch modifies SoftFloat library so that it can be configured in
run-time in relation to the meaning of signaling NaN bit, while, at the
same time, strictly preserving its behavior on all existing platforms.

Background:

In floating-point calculations, there is a need for denoting undefined or
unrepresentable values. This is achieved by defining certain floating-point
numerical values to be NaNs (which stands for "not a number"). For additional
reasons, virtually all modern floating-point unit implementations use two
kinds of NaNs: quiet and signaling. The binary representations of these two
kinds of NaNs, as a rule, differ only in one bit (that bit is, traditionally,
the first bit of mantissa).

Up to 2008, standards for floating-point did not specify all details about
binary representation of NaNs. More specifically, the meaning of the bit
that is used for distinguishing between signaling and quiet NaNs was not
strictly prescribed. (IEEE 754-2008 was the first floating-point standard
that defined that meaning clearly, see [1], p. 35) As a result, different
platforms took different approaches, and that presented considerable
challenge for multi-platform emulators like QEMU.

Mips platform represents the most complex case among QEMU-supported
platforms regarding signaling NaN bit. Up to the Release 6 of Mips
architecture, "1" in signaling NaN bit denoted signaling NaN, which is
opposite to IEEE 754-2008 standard. From Release 6 on, Mips architecture
adopted IEEE standard prescription, and "0" denotes signaling NaN. On top of
that, Mips architecture for SIMD (also known as MSA, or vector instructions)
also specifies signaling bit in accordance to IEEE standard. MSA unit can be
implemented with both pre-Release 6 and Release 6 main processor units.

QEMU uses SoftFloat library to implement various floating-point-related
instructions on all platforms. The current QEMU implementation allows for
defining meaning of signaling NaN bit during build time, and is implemented
via preprocessor macro called SNAN_BIT_IS_ONE.

On the other hand, the change in this patch enables SoftFloat library to be
configured in run-time. This configuration is meant to occur during CPU
initialization, at the moment when it is definitely known what desired
behavior for particular CPU (or any additional FPUs) is.

The change is implemented so that it is consistent with existing
implementation of similar cases. This means that structure float_status is
used for passing the information about desired signaling NaN bit on each
invocation of SoftFloat functions. The additional field in float_status is
called snan_bit_is_one, which supersedes macro SNAN_BIT_IS_ONE.

IMPORTANT:

This change is not meant to create any change in emulator behavior or
functionality on any platform. It just provides the means for SoftFloat
library to be used in a more flexible way - in other words, it will just
prepare SoftFloat library for usage related to Mips platform and its
specifics regarding signaling bit meaning, which is done in some of
subsequent patches from this series.

Further break down of changes:

  1) Added field snan_bit_is_one to the structure float_status, and
     correspondent setter function set_snan_bit_is_one().

  2) Constants <float16|float32|float64|floatx80|float128>_default_nan
     (used both internally and externally) converted to functions
     <float16|float32|float64|floatx80|float128>_default_nan(float_status*).
     This is necessary since they are dependent on signaling bit meaning.
     At the same time, for the sake of code cleanup and simplicity, constants
     <floatx80|float128>_default_nan_<low|high> (used only internally within
     SoftFloat library) are removed, as not needed.

  3) Added a float_status* argument to SoftFloat library functions
     XXX_is_quiet_nan(XXX a_), XXX_is_signaling_nan(XXX a_),
     XXX_maybe_silence_nan(XXX a_). This argument must be present in
     order to enable correct invocation of new version of functions
     XXX_default_nan(). (XXX is <float16|float32|float64|floatx80|float128>
     here)

  4) Updated code for all platforms to reflect changes in SoftFloat library.
     This change is twofolds: it includes modifications of SoftFloat library
     functions invocations, and an addition of invocation of function
     set_snan_bit_is_one() during CPU initialization, with arguments that
     are appropriate for each particular platform. It was established that
     all platforms zero their main CPU data structures, so snan_bit_is_one(0)
     in appropriate places is not added, as it is not needed.

[1] "IEEE Standard for Floating-Point Arithmetic",
    IEEE Computer Society, August 29, 2008.

Signed-off-by: Thomas Schwinge <thomas@codesourcery.com>
Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Tested-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Tested-by: Leon Alrae <leon.alrae@imgtec.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
[leon.alrae@imgtec.com:
 * cherry-picked 2 chunks from patch #2 to fix compilation warnings]
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
2016-06-24 13:40:37 +01:00
Gerd Hoffmann c52125ab92 ipxe: update prebuilt binaries
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-06-24 14:18:19 +02:00
Gerd Hoffmann 43716de6b3 vmxnet3: add boot rom
Disable for old machine types as this is a guest visible change.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-06-24 14:11:36 +02:00
Gerd Hoffmann 1676103dc2 e1000e: add boot rom
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-06-24 13:56:36 +02:00
Gerd Hoffmann 4d9dc8b7a8 ipxe: add vmxnet3 rom
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-06-24 13:53:57 +02:00
Gerd Hoffmann c9c3dc5f4b ipxe: add e1000e rom
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-06-24 13:53:52 +02:00
Gerd Hoffmann ffdc5a2bce ipxe: update submodule from 4e03af8ec to 041863191
shortlog
========

Andrew Widdersheim (1):
      [netdevice] Add "ifname" setting

Carl Henrik Lunde (1):
      [vmxnet3] Avoid completely filling the TX descriptor ring

Christian Hesse (2):
      [golan] Fix build error on some versions of gcc
      [ath9k] Fix buffer overrun for ar9287

Christian Nilsson (2):
      [intel] Add PCI device ID for another I219-V
      [intel] Add PCI device ID for another I219-LM

Hummel Frank (1):
      [intel] Add INTEL_NO_PHY_RST for I218-LM

Kyösti Mälkki (1):
      [intel] Add PCI IDs for i210/i211 flashless operation

Ladi Prosek (6):
      [pci] Add pci_find_next_capability()
      [virtio] Add virtio 1.0 constants and data structures
      [virtio] Add virtio 1.0 PCI support
      [virtio] Add virtio-net 1.0 support
      [virtio] Renumber virtio_pci_region flags
      [virtio] Fix virtio-pci logging

Leendert van Doorn (2):
      [tg3] Fix address truncation bug on 64-bit machines
      [tg3] Add missing memory barrier

Michael Brown (287):
      [settings] Re-add "uristring" setting type
      [dhcp] Do not skip ProxyDHCPREQUEST if next-server is empty
      [efi] Add definitions of GUIDs observed when booting shim.efi and grub.efi
      [efi] Mark EFI debug transcription functions as __attribute__ (( pure ))
      [efi] Remove raw EFI_HANDLE values from debug messages
      [efi] Include installed protocol list in unknown handle names
      [efi] Improve efi_wrap debugging
      [pxe] Construct all fake DHCP packets before starting PXE NBP
      [efi] Add definitions of GUIDs observed when booting wdsmgfw.efi
      [efi] Fix debug directory size
      [efi] Populate debug directory entry FileOffset field
      [build] Search for ldlinux.c32 separately from isolinux.bin
      [tcpip] Allow supported address families to be detected at runtime
      [efi] Allow calls to efi_snp_claim() and efi_snp_release() to be nested
      [efi] Fix order of events on SNP removal path
      [efi] Do not return EFI_NOT_READY from our ReceiveFilters() method
      [pxe] Populate ciaddr in fake PXE Boot Server ACK packet
      [uri] Generalise tftp_uri() to pxe_uri()
      [efi] Implement the EFI_PXE_BASE_CODE_PROTOCOL
      [usb] Expose usb_find_driver()
      [usb] Add function to device's function list before attempting probe
      [efi] Add USB headers and GUID definitions
      [efi] Allow efidev_parent() to traverse multiple device generations
      [efi] Add a USB host controller driver based on EFI_USB_IO_PROTOCOL
      [tcpip] Avoid generating positive zero for transmitted UDP checksums
      [usb] Generalise zero-length packet generation logic
      [ehci] Do not treat zero-length NULL pointers as unreachable
      [ehci] Support arbitrarily large transfers
      [xhci] Support arbitrarily large transfers
      [efi] Provide efi_devpath_len()
      [efi] Include a copy of the device path within struct efi_device
      [usb] Select preferred USB device configuration based on driver score
      [usb] Allow for wildcard USB class IDs
      [efi] Expose unused USB devices via EFI_USB_IO_PROTOCOL
      [ncm] Support setting MAC address
      [build] Remove dependency on libiberty
      [efi] Minimise use of iPXE header files when building host utilities
      [pxe] Invoke INT 1a,564e when PXE stack is activated
      [pxe] Notify BIOS via INT 1a,564e for each new network device
      [efi] Work around broken 32-bit PE executable parsing in ImageHlp.dll
      [efi] Avoid infinite loops when asked to stop non-existent devices
      [efi] Expose an UNDI interface alongside the existing SNP interface
      [malloc] Avoid integer overflow for excessively large memory allocations
      [peerdist] Avoid NULL pointer dereference for plaintext blocks
      [http] Verify server port when reusing a pooled connection
      [efi] Reset root directory when installing EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
      [efi] Update to current EDK2 headers
      [efi] Import EFI_HII_FONT_PROTOCOL definitions
      [fbcon] Allow character height to be selected at runtime
      [fbcon] Move margin calculations to fbcon.c
      [console] Tidy up config/console.h
      [build] Generalise CONSOLE_VESAFB to CONSOLE_FRAMEBUFFER
      [efi] Add support for EFI_GRAPHICS_OUTPUT_PROTOCOL frame buffer consoles
      [dhcp] Reset start time when deferring discovery
      [dhcp] Limit maximum number of DHCP discovery deferrals
      [comboot] Reset console before starting COMBOOT executable
      [intel] Forcibly skip PHY reset on some models
      [intel] Correct definition of receive overrun bit
      [infiniband] Add definitions for FDR and EDR link speeds
      [infiniband] Add qword accessors for ib_guid and ib_gid
      [pci] Add definitions for PCI Express function level reset (FLR)
      [bitops] Fix definitions for big-endian devices
      [smsc95xx] Add driver for SMSC/Microchip LAN95xx USB Ethernet NICs
      [bitops] Provide BIT_QWORD_PTR()
      [efi] Add %.usb target for building EFI-bootable USB (or other) disk images
      [usb] Use port->disconnected to check for disconnected devices
      [usb] Record USB device speed separately from current port speed
      [usb] Allow USB device IDs to include arbitrary driver-specific data
      [usb] Allow additional settling time for out-of-spec hubs
      [acm] Add support for CDC-ACM (aka USB RNDIS) devices
      [xhci] Ensure that zero-length packets are not part of a TRB chain
      [efi] Centralise EFI file system info GUIDs
      [build] Allow extra objects to be included in an all-drivers build
      [bios] Add support for injecting keypresses
      [settings] Expose SMBIOS settings as global variables
      [smsc95xx] Allow for multiple methods for obtaining the MAC address
      [crypto] Dual-license selected DRBG files
      [smsc95xx] Fetch MAC from SMBIOS OEM string for Honeywell VM3
      [crypto] Dual-license more selected DRBG files
      [vmware] Expose GuestRPC mechanism in 64-bit builds
      [romprefix] Report an optimistic runtime size estimate
      [usb] Add support for numeric keypad on USB keyboards
      [http] Handle relative redirection URIs
      [image] Provide image_set_uri() to modify an image's URI
      [downloader] Update image URI in response to a redirection
      [tftp] Do not change current working URI when TFTP server is cleared
      [infiniband] Profile post work queue entry operations
      [pxe] Colourise debug output
      [pxe] Add debug message to display real-mode segment addresses
      [i386] Add check_bios_interrupts() debug function
      [debug] Allow debug colourisation to be disabled
      [stp] Fix incorrectly disambiguated errors
      [build] Add named configuration for public cloud environments
      [smsc95xx] Enable LEDs
      [usb] Allow USB endpoints to specify a reserved header length for refills
      [smsc95xx] Reserve headroom in received packets
      [autoboot] Fix incorrect boolean logic
      [uri] Avoid potentially large stack allocation
      [ocsp] Avoid including a double path separator in request URI
      [tftp] Mangle initial slash on TFTP URIs
      [uri] Apply URI decoding for all parsed URIs
      [tcp] Guard against malformed TCP options
      [slam] Avoid potential division by zero
      [ath9k] Remove broken ath_rxbuf_alloc()
      [ehci] Add extra debugging information
      [malloc] Guard against unsigned integer overflow
      [iobuf] Improve robustness of I/O buffer allocation
      [pxe] Clarify comments regarding shrinking of cached DHCP packet
      [efi] Add missing definitions for function key scancodes
      [prefix] Pad .text16 and .data16 segment sizes at build time
      [libc] Split rmsetjmp() and rmlongjmp() into a separate rmsetjmp.h
      [bios] Use intptr_t when casting .text16 function pointers
      [bios] Use size_t when casting _text16_memsz and _data16_memsz
      [bios] Allow relocate.c to be compiled for x86_64
      [bios] Allow rtc_entropy.c to be compiled for x86_64
      [bios] Allow bzimage.c to be compiled for x86_64
      [bios] Allow bios_console.c to be compiled for x86_64
      [bios] Allow memmap.c to be compiled for x86_64
      [bios] Allow librm to be compiled for x86_64
      [bios] Move isolinux definitions to Makefile.pcbios
      [bios] Add bin-x86_64-pcbios build platform
      [librm] Discard argument as part of return from prot_call()
      [librm] Discard argument as part of return from real_call()
      [prefix] Align INT 15,88 temporary decompression area to a page boundary
      [romprefix] Align PMM temporary decompression area to a page boundary
      [bios] Make uses of REAL_CODE() and PHYS_CODE() 64-bit clean
      [librm] Use garbage-collectable section names
      [bios] Use an 8kB stack for x86_64
      [prefix] Use garbage-collectable section names
      [librm] Simplify definitions for prot_call() and real_call() stack frames
      [prefix] Standardise calls to prot_call()
      [librm] Convert prot_call() to a real-mode near call
      [librm] Provide an abstraction wrapper for prot_call
      [librm] Transition to protected mode within init_librm()
      [relocate] Preserve page alignment during relocation
      [librm] Prepare for long-mode memory map
      [librm] Generate page tables for 64-bit builds
      [build] Fix building on older versions of binutils
      [librm] Add phys_call() wrapper for calling code with physical addressing
      [librm] Do not preserve flags unnecessarily
      [librm] Mark virt_offset, text16, data16, rm_cs, and rm_ds as constant
      [librm] Support userptr_t in 64-bit builds
      [librm] Rename prot_call() to virt_call()
      [librm] Add support for running in 64-bit long mode
      [ioapi] Split ioremap() out to a separate IOMAP API
      [librm] Support ioremap() for addresses above 4GB in a 64-bit build
      [netdevice] Refuse to create duplicate network device names
      [infiniband] Remove concept of whole-device owner data
      [infiniband] Avoid multiple calls to ib_cmrc_shutdown()
      [infiniband] Add support for performing service record lookups
      [infiniband] Assign names to Infiniband devices for debug messages
      [infiniband] Use "%#lx" as format specifier for queue pair numbers
      [infiniband] Use "%d" as format specifier for LIDs
      [infiniband] Use connection's local ID as debug message identifier
      [infiniband] Use correct transaction identifier in CM responses
      [infiniband] Do not use GRH for local paths
      [infiniband] Record multicast GID attachment as part of group membership
      [infiniband] Parse MLID, rate, and SL from multicast membership record
      [ipoib] Avoid unnecessary path record lookup for broadcast address
      [ipoib] Simplify test for received broadcast packets
      [infiniband] Allow for the creation of multicast groups
      [pcbios] Restrict external memory allocations to the low 4GB
      [infiniband] Assign names to CMRC connections
      [infiniband] Assign names to queue pairs
      [infiniband] Add "ibstat" command
      [infiniband] Retrieve GID flag from cached path entries
      [ipoib] Resimplify test for received broadcast packets
      [ipoib] Increase number of transmit work queue entries
      [ifmgmt] Include human-readable error message for configuration failure
      [infiniband] Make IPoIB support configurable at build time
      [eoib] Add Ethernet over Infiniband (EoIB) driver
      [eoib] Silently ignore EoIB heartbeat packets
      [eoib] Allow the multicast group to be forcefully created
      [eoib] Support non-FullMember gateway devices
      [xsigo] Add support for Xsigo virtual Ethernet (XVE) EoIB devices
      [efi] Work around broken GetFontInfo() implementations
      [tls] Avoid potential out-of-bound reads in length fields
      [crypto] Allow for zero-length ASN.1 cursors
      [pixbuf] Check for unsigned integer overflow on multiplication
      [arp] Validate length of ARP packet
      [librm] Do not unconditionally preserve flags across virt_call()
      [linda] Use standard readq() and writeq() implementations
      [qib7322] Use standard readq() and writeq() implementations
      [test] Add missing #include <string.h>
      [serial] Add missing #include <string.h>
      [3c595] Fix compilation when "char" is unsigned by default
      [tg3] Remove x86-specific inline assembly
      [efi] Centralise architecture-independent EFI Makefile and linker script
      [build] Allow assembler section type character to vary by architecture
      [build] Accept CROSS= as a synonym for CROSS_COMPILE=
      [efi] Update to current EDK2 headers
      [efi] Add processor binding headers for ARM and AArch64
      [uri] Support URIs containing only scheme and path components
      [uri] Support "file:" URIs describing relative paths
      [efi] Provide access to files stored on EFI filesystems
      [build] Remove long-obsolete header file
      [pseudobit] Rename bitops.h to pseudobit.h
      [bitops] Add generic atomic bit test, set, and clear functions
      [hyperv] Use generic set_bit() function
      [xen] Use generic test_and_clear_bit() function
      [test] Move i386-specific tests to arch/i386/tests
      [efi] Move architecture-independent EFI prefixes to interface/efi
      [libc] Allow container_of() to be used on volatile pointers
      [ipoib] Allow external code to identify IPoIB network devices
      [hermon] Add missing iounmap()
      [arbel] Add missing iounmap()
      [linda] Add missing iounmap()
      [qib7322] Add missing iounmap()
      [crypto] Allow trusted certificates to be stored in non-volatile options
      [hermon] Allocate space for GRH on UD queue pairs
      [arbel] Allocate space for GRH on UD queue pairs
      [infiniband] Allow drivers to override the eIPoIB LEMAC
      [build] Do not use "objcopy -O binary" for objects with relocation records
      [gdb] Add support for x86_64
      [int13] Allow drive to be hooked using the natural drive number
      [int13] Allow default drive to be specified via "san-drive" setting
      [3c5x9] Avoid use of sleep() in driver code
      [etherfabric] Avoid use of sleep() in driver code
      [hermon] Fix received packet length
      [arbel] Fix received packet length
      [libc] Make sleep() interruptible
      [pxe] Implicitly open network device in PXENV_UDP_OPEN
      [prefix] Use CRC32 to verify each block prior to decompression
      [crypto] Allow cross-certificate source to be configured at build time
      [iscsi] Include DHCP server address in iBFT
      [netdevice] Return ENOENT for an unknown bus type
      [linda] Validate payload length
      [qib7322] Validate payload length
      [test] Update snprintf_ok() to use okx()
      [libc] Print "<NULL>" for wide-character NULL strings
      [efi] Work around broken EFI HII specification
      [comboot] Support COMBOOT in 64-bit builds
      [ethernet] Make LACP support configurable at build time
      [libc] Allow CPU architectures to use unoptimised string functions
      [libgcc] Provide symbol to handle gcc's implicit calls to memset()
      [image] Skip misleading "format not recognised" error message
      [librm] Reduce real-mode stack consumption in virt_call()
      [tg3] Fix _tg3_flag() for 64-bit builds
      [librm] Preserve FPU, MMX and SSE state across calls to virt_call()
      [efi] Eliminate use of libbfd
      [build] Remove unnecessary dependency on zlib
      [tcpip] Do not fall back to using unoptimised TCP/IP checksumming
      [efi] Use a timer event to generate the currticks() timer
      [efi] Generalise EFI entropy generation to non-x86 CPUs
      [sis190] Fix building with GCC 6
      [skge] Fix building with GCC 6
      [golan] Fix building with GCC 6
      [ath] Fix building with GCC 6
      [legacy] Fix building with GCC 6
      [libgcc] Provide __divmoddi4()
      [bitops] Fix typo in test case
      [arm] Add support for 32-bit ARM
      [arm] Avoid instruction references to symbols defined via ".equ"
      [arm] Split out 32-bit-specific code to arch/arm32
      [arm] Add support for 64-bit ARM (Aarch64)
      [efi] Allow for building with older versions of elf.h system header
      [libc] Avoid implicit assumptions about potentially-optimised memcpy()
      [arm] Add optimised string functions for 64-bit ARM
      [arm] Add optimised TCP/IP checksumming for 64-bit ARM
      [efi] Guard against GetStatus() failing to return a NULL TX buffer
      [arm] Use CNTVCT_EL0 as profiling timestamp
      [undi] Work around broken HP EliteBook 745 G3 PXE ROM
      [pci] Add support for PCI Enhanced Allocation
      [settings] Extend numerical setting tags to "unsigned long"
      [netdevice] Fix failure path in register_netdev()
      [lotest] Add option to use broadcast packets for loopback testing
      [http] Ignore unrecognised "Connection" header tokens
      [efi] Work around broken UEFI keyboard drivers
      [axge] Add driver for ASIX 10/100/1000 USB Ethernet NICs
      [arm] Use correct DHCP client architecture values
      [dhcp] Fix definitions for x86_64 and EFI BC client architectures
      [efi] Expose DHCP packets via the Apple NetBoot protocol
      [libc] Always use a non-zero seed for the (non-crypto) RNG
      [pci] Support systems with multiple PCI root bridges
      [http] Accept headers with no whitespace following the colon
      [tcp] Send TCP keepalives on idle established connections
      [time] Allow system clock to be adjusted at runtime
      [ntp] Add simple NTP client
      [cmdline] Add "ntp" command
      [thunderx] Add driver for Cavium ThunderX SoC NICs
      [thunderx] Fix channel configuration for VNICs 1-7
      [efi] Include VLAN in SNP device path if applicable
      [thunderx] Retrieve base MAC address via EFI_THUNDER_CONFIG_PROTOCOL
      [smsc75xx] Allow up to 100ms for reset to complete
      [efi] Report failures to stop the EFI timer tick event
      [efi] Do not copy garbage bytes into SNP device path MAC address
      [thunderx] Fix compilation with older versions of gcc

Mika Tiainen (1):
      [intel] Add INTEL_NO_PHY_RST for another I218-LM variant

Suresh Sundriyal (1):
      [pool] Fix check for reopenable pooled connections

Torgeir Wulfsberg (1):
      [intel] Add INTEL_NO_PHY_RST for I217-LM

Vinson Lee (2):
      [mucurses] Fix GCC 6 nonnull-compare errors
      [build] Remove nested "my" declaration

Wissam Shoukair (3):
      [golan] Add Connect-IB, ConnectX-4 and ConnectX-4 Lx (Infiniband) support
      [mlx_icmd] Fix compilation error in GCC versions newer than 4.6.4
      [golan] Add missing iounmap()

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-06-24 13:41:56 +02:00
Peter Maydell a01aef5d2f pc, pci, virtio: new features, cleanups, fixes
nvdimm label support
 cpu acpi hotplug rework
 virtio rework
 misc cleanups and fixes
 
 Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABAgAGBQJXbMooAAoJECgfDbjSjVRp0fYIAJ8hWf4im66Y/+Tyk957XJJt
 GZ4axsa21/k6gbVZxrx6jAUwjzWEqLeXKiZ79YMVtE1SIUhSqs1exhfrGhNNXjvn
 t46utHtwMnb6XPb2ru4+bQr1u+NN7RtTmi9Sd3uonWnIGXFrA69QeFejCVcEcSvJ
 uiwjkODmPW0+7gRLa4SP80iS1E6nSA96Z7aOMdbQNMIW1HRVulkiXO2lwg8yz5D0
 QkTqMUk/VK22RFnskDLDnTjXTADSx8L1ipjSkr4D92jTJ06ZLklVe9vijbpmd85k
 ScLRNSgMstkrCe9wuP1CWZeiAG+t7QLBRJWQh7kSk7xWJONP9ShZRX4MbCl7mwI=
 =XqTl
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging

pc, pci, virtio: new features, cleanups, fixes

nvdimm label support
cpu acpi hotplug rework
virtio rework
misc cleanups and fixes

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

# gpg: Signature made Fri 24 Jun 2016 06:50:32 BST
# gpg:                using RSA key 0x281F0DB8D28D5469
# gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>"
# gpg:                 aka "Michael S. Tsirkin <mst@redhat.com>"
# Primary key fingerprint: 0270 606B 6F3C DF3D 0B17  0970 C350 3912 AFBE 8E67
#      Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA  8A0D 281F 0DB8 D28D 5469

* remotes/mst/tags/for_upstream: (34 commits)
  virtio-bus: remove old set_host_notifier callback
  virtio-mmio: convert to ioeventfd callbacks
  virtio-pci: convert to ioeventfd callbacks
  virtio-ccw: convert to ioeventfd callbacks
  virtio-bus: have callers tolerate new host notifier api
  virtio-bus: common ioeventfd infrastructure
  pc: acpi: drop intermediate PCMachineState.node_cpu
  acpi-test-data: update expected
  pc: use new CPU hotplug interface since 2.7 machine type
  acpi: cpuhp: add cpu._OST handling
  acpi: cpuhp: implement hot-remove parts of CPU hotplug interface
  acpi: cpuhp: implement hot-add parts of CPU hotplug interface
  pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook
  acpi: cpuhp: add CPU devices AML with _STA method
  pc: piix4/ich9: add 'cpu-hotplug-legacy' property
  docs: update ACPI CPU hotplug spec with new protocol
  i386: pci-assign: Fix MSI-X table size
  docs: add NVDIMM ACPI documentation
  nvdimm acpi: support Set Namespace Label Data function
  nvdimm acpi: support Get Namespace Label Data function
  ...

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2016-06-24 11:00:15 +01:00
Peter Maydell 55d72a7eb3 linux-user: Avoid possible misalignment in host_to_target_siginfo()
host_to_target_siginfo() is implemented by a combination of
host_to_target_siginfo_noswap() followed by tswap_siginfo().
The first of these two functions assumes that the target_siginfo_t
it is writing to is correctly aligned, but the pointer passed
into host_to_target_siginfo() is directly from the guest and
might be misaligned. Use a local variable to avoid this problem.
(tswap_siginfo() does now correctly handle a misaligned destination.)

We have to add a memset() to host_to_target_siginfo_noswap()
to avoid some false positive "may be used uninitialized" warnings
from gcc about subfields of the _sifields union if it chooses to
inline both tswap_siginfo() and host_to_target_siginfo_noswap()
into host_to_target_siginfo().

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Peter Maydell <riku.voipio@linaro.org>
2016-06-24 11:55:44 +03:00
Cornelia Huck 21a4d96243 virtio-bus: remove old set_host_notifier callback
All users have been converted to the new ioevent callbacks.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:47:35 +03:00
Cornelia Huck c0971bcb7c virtio-mmio: convert to ioeventfd callbacks
Convert to the new interface.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:47:35 +03:00
Cornelia Huck 9f06e71a56 virtio-pci: convert to ioeventfd callbacks
Convert to new interface.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:47:35 +03:00
Cornelia Huck 7c55f68a63 virtio-ccw: convert to ioeventfd callbacks
Use the new interface.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:47:35 +03:00
Cornelia Huck b1f0a33d80 virtio-bus: have callers tolerate new host notifier api
Have vhost and dataplane use the new api for transports that
have been converted.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:47:35 +03:00
Cornelia Huck 6798e245a3 virtio-bus: common ioeventfd infrastructure
Introduce a set of ioeventfd callbacks on the virtio-bus level
that can be implemented by the individual transports. At the
virtio-bus level, do common handling for host notifiers (which
is actually most of it).

Two things of note:
- When setting the host notifier, we only switch from/to the
  generic ioeventfd handler. This fixes a latent bug where we
  had no ioeventfd assigned for a certain window.
- We always iterate over all possible virtio queues, even though
  ccw (currently) has a lower limit. It does not really matter
  here.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:47:35 +03:00
Igor Mammedov 1f3aba377d pc: acpi: drop intermediate PCMachineState.node_cpu
PCMachineState.node_cpu was used for mapping APIC ID
to numa node id as CPU entries in SRAT used to be
built on sparse APIC ID bitmap (up to apic_id_limit).
However since commit
  5803fce pc: acpi: SRAT: create only valid processor lapic entries
CPU entries in SRAT aren't build using apic bitmap
but using 0..maxcpus index instead which is also used
for creating numa_info[x].node_cpu map.
So instead of doing useless intermediate conversion from
  1. node by cpu index -> node by apic id
       i.e. numa_info[x].node_cpu -> PCMachineState.node_cpu
  2. apic id -> srat entry PMX
       PCMachineState.node_cpu[apic id] -> PMX value
use numa_info[x].node_cpu map directly like ARM does and do
  1. numa_info[x].node_cpu -> PMX value using index
     in range 0..maxcpus
and drop not necessary PCMachineState.node_cpu and related
code.

That also removes the last (not counting legacy hotplug)
dependency of ACPI code on apic_id_limit and need to allocate
huge sparse PCMachineState.node_cpu array in case of 32-bit
APIC IDs.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:34:47 +03:00
Michael S. Tsirkin d8d69e1f51 acpi-test-data: update expected
switched to new cpu hotplug interface, aml changed.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 08:22:07 +03:00
Igor Mammedov 679dd1a957 pc: use new CPU hotplug interface since 2.7 machine type
For compatibility reasons PC/Q35 will start with legacy
CPU hotplug interface by default but with new CPU hotplug
AML code since 2.7 machine type. That way legacy firmware
that doesn't use QEMU generated ACPI tables will be
able to continue using legacy CPU hotplug interface.

While new machine type, with firmware supporting QEMU
provided ACPI tables, will generate new CPU hotplug AML,
which will switch to new CPU hotplug interface when
guest OS executes its _INI method on ACPI tables
loading.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:21:38 +03:00
Igor Mammedov 76623d00ae acpi: cpuhp: add cpu._OST handling
it adds HW and AML parts for CPU_Device._OST method
handling to allow OSPM reports status of hot-(un)plug
operation.
And extends QMP command query-acpi-ospm-status to report
CPU's OST info along with already reported PC-DIMM devices.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:21:35 +03:00
Igor Mammedov 8872c25a26 acpi: cpuhp: implement hot-remove parts of CPU hotplug interface
it adds hw registers needed for handling CPU hot-remove and
corresponding AML methods to request and eject a CPU with
necessary hotplug callbacks in pc,piix4,ich9 code.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:21:26 +03:00
Igor Mammedov d2238cb678 acpi: cpuhp: implement hot-add parts of CPU hotplug interface
it adds hw registers needed for handling CPU hot-add and
corresponding AML methods to handle hot-add events on
guest side.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:21:22 +03:00
Igor Mammedov ac35f13ba8 pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook
Add madt_cpu callback to AcpiDeviceIfClass and use
it for generating LAPIC MADT entries for CPUs.

Later it will be used for generating x2APIC
entries in case of more than 255 CPUs and also
would be reused by ARM target when ACPI CPU hotplug
is introduced there.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:21:16 +03:00
Igor Mammedov 5e1b5d9388 acpi: cpuhp: add CPU devices AML with _STA method
it adds CPU objects to DSDT with _STA method
and QEMU side of CPU hotplug interface initialization
with registers sufficient to handle _STA requests,
including necessary hotplug callbacks in piix4,ich9 code.

Hot-(un)plug hw/acpi parts will be added by
corresponding follow up patches.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:21:01 +03:00
Igor Mammedov 16bcab97eb pc: piix4/ich9: add 'cpu-hotplug-legacy' property
It will be used to select which hotplug call-back is called
and for switching from legacy mode into new one.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:20:55 +03:00
Igor Mammedov abd49bc2ed docs: update ACPI CPU hotplug spec with new protocol
Add description of new CPU hotplug interface.

To switch from from legacy mode into new mode use fact
that write accesses into CPU present bitmap were never
used before and were ignored by QEMU.
So use it to as a way to switch from legacy mode.
That way pc/q35 machine starts in legacy mode and
QEMU generated ACPI tables will switch to new CPU
hotplug interface during runtime.
In case QEMU is started with legacy BIOS (that doesn't
support QEMU generated ACPI tables), legacy CPU hotplug
will remain active and could be used by BIOS built in
ACPI tables for CPU hotplug.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:20:22 +03:00
Ido Yariv aa1dd39ca3 i386: pci-assign: Fix MSI-X table size
The current code creates a whole page mmio region for the MSI-X table
size.

However, the page containing the MSI-X table may contain other registers
not related to MSI-X. Creating an mmio region for the whole page masks
such registers and may break drivers in the guest OS.

Since maximal number of entries is known, use that instead to deduce the
table size when setting up the mmio region.

Signed-off-by: Ido Yariv <ido@wizery.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 15b82b1dc5 docs: add NVDIMM ACPI documentation
It describes the basic concepts of NVDIMM ACPI and the interfaces
between QEMU and the ACPI BIOS

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 14e44198ff nvdimm acpi: support Set Namespace Label Data function
Function 6 is used to set Namespace Label Data

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 2b9e57fc7f nvdimm acpi: support Get Namespace Label Data function
Function 5 is used to get Namespace Label Data

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 5797dcdc7a nvdimm acpi: support Get Namespace Label Size function
Function 4 is used to get Namespace label size

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong d15fc53f8d nvdimm acpi: check revision
Currently only revision 1 is supported

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 189f4d5635 nvdimm acpi: abstract the operations for root & nvdimm devices
It separates the operations between root device and nvdimm devices
in order to introducing label functions support for nvdimm device

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 90623ebf60 nvdimm acpi: check UUID
Check arg0 which indicates UUID to see if it is valid

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 4568c94806 nvdimm acpi: save arg3 of _DSM method
Check if the input Arg3 is valid then store it into ARG3 if it is
needed

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 732b530c1b nvdimm acpi: set HDLE properly
Now we pass HDLE to Qemu properly, use 0 for root device and use the
handle for nvdimm devices

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong 052889b8e9 acpi: add aml_call5
It will be used by NVDIMM ACPI

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong b265f27c5a acpi: add aml_object_type
Implement ObjectType which is used by NVDIMM _DSM method in
later patch

Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00
Xiao Guangrong d6fb213a62 nvdimm: support nvdimm label
Introduce a parameter, 'label-size', which is the size of nvdimm label
data area which is reserved at the end of backend memory. It is required
at least 128k

Two callbacks, read_label_data() and write_label_data(), are used to
operate the label area

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-06-24 05:13:57 +03:00