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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
This callback returns the MemoryRegion that is the memory of dimm should
be kept during live migration
nvdimm device is different with pc-dimm as its memory includes not only
the MemoryRegion directly mapping to guest's address space but also the
memory used as label data
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>
Use the ACPI table construction tools to create an ACPI entry
for IPMI. This adds a function called build_acpi_ipmi_devices
to add an DSDT entry for IPMI if IPMI is compiled in and an
IPMI device exists. It also adds a dummy function if IPMI
is not compiled in.
This conforms to section "C3-2 Locating IPMI System Interfaces in
ACPI Name Space" in the IPMI 2.0 specification.
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Add an IPMI table entry to the SMBIOS.
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This will let things in other files (like IPMI) build SMBIOS tables.
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Currently outstanding patches for spapr, target-ppc and related
devices. This batch has:
* Significant new progress towards full support for hypervisor
mode
* Assorted bugfixes
* Some preliminary patches towards dynamic DMA window support
The last involves a change to memory.c, which Paolo has said I can
take through this tree.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJXa3gJAAoJEGw4ysog2bOSzRQQAI0K+F2CoKuiGJ3csr40edlA
rDvHJd0a3DvF5ez8YBY9iiG2nXaphz7LrsfkFUQ/UmqlIpVLNdJaJ8l/RnjwrVnP
coJ9sFkzzARQF39BybGYPOVMalgi/MhnN/+zm87JaSD+C7gihG+ghYR4sgLHWalb
xWDFLnZVg3uTC1IQzS14NMjqswQN1O0d9wyfYjBogAAEvP4daGKVTQCgpoVwGaXw
JNE4Sm1vVIqJtiYr48V4cNVQWodpTMoHdVPJ6LPXWBlJMd3K5BEy3QsFc+jra+kG
Uj8dayNJwu4CjIwDWz4kpL/H0XtLNxfC2/6n1khc53OEnG5SzrgN80yJBvAKzU5S
KDQemwyOd3R2YTItkHR++QhLqHVx39Hr3BsFGXGyugAaczD7v4NLx87xmMEQOyQB
ai+B4EpQqS/lEOCxyf7nRzgRxA5uB2My9L31peWt862G/LH+UixMWn7CwKW4aKul
CuV4kqVdVQHrWe966HNYnDwfGpmaEXF9W5uLu7GenhFtW6R6IRhT1oORiyqHRfEi
9lTVx/vvHK2U3Ie3RCu3ZYuSbwDhP482J8ysfSo1iCkbSXHwNNACkLQmh0s/WmOs
X2erIOUAja/Ku2DyZ6bXngXN/W/JR6Hw1IpEMeo6LxeK8VIm7F8PkCgrJCg88EEp
ZFxGGYkc3HqksgJy1tuV
=Da1O
-----END PGP SIGNATURE-----
Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.7-20160623' into staging
ppc patch queue for 2016-06-23
Currently outstanding patches for spapr, target-ppc and related
devices. This batch has:
* Significant new progress towards full support for hypervisor
mode
* Assorted bugfixes
* Some preliminary patches towards dynamic DMA window support
The last involves a change to memory.c, which Paolo has said I can
take through this tree.
# gpg: Signature made Thu 23 Jun 2016 06:47:53 BST
# gpg: using RSA key 0x6C38CACA20D9B392
# gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
# gpg: aka "David Gibson (Red Hat) <dgibson@redhat.com>"
# gpg: aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
# gpg: WARNING: This key is not certified with sufficiently trusted signatures!
# gpg: It is not certain that the signature belongs to the owner.
# Primary key fingerprint: 75F4 6586 AE61 A66C C44E 87DC 6C38 CACA 20D9 B392
* remotes/dgibson/tags/ppc-for-2.7-20160623:
ppc: Disable huge page support if it is not available for main RAM
ppc: Add P7/P8 Power Management instructions
ppc: Move exception generation code out of line
ppc: Turn a bunch of booleans from int to bool
ppc: Add real mode CI load/store instructions for P7 and P8
ppc: Rework generation of priv and inval interrupts
ppc: Fix generation if ISI/DSI vs. HV mode
ppc: Fix POWER7 and POWER8 exception definitions
ppc: fix exception model for HV mode
ppc: define a default LPCR value
ppc: Fix rfi/rfid/hrfi/... emulation
memory: Add reporting of supported page sizes
ppc: Improve emulation of THRM registers
target-ppc: Fix rlwimi, rlwinm, rlwnm again
ppc64: disable gen_pause() for linux-user mode
tests: Use '+=' to add additional tests, not '='
powerpc/mm: Update the WIMG check during H_ENTER
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
On powerpc, we must only signal huge page support to the guest if
all memory areas are capable of supporting huge pages. The commit
2d103aae87 ("fix hugepage support when using memory-backend-file")
already fixed the case when the user specified the mem-path property
for NUMA memory nodes instead of using the global "-mem-path" option.
However, there is one more case where it currently can go wrong.
When specifying additional memory DIMMs without using NUMA, e.g.
qemu-system-ppc64 -enable-kvm ... -m 1G,slots=2,maxmem=2G \
-device pc-dimm,id=dimm-mem1,memdev=mem1 -object \
memory-backend-file,policy=default,mem-path=/...,size=1G,id=mem1
the code in getrampagesize() currently assumes that huge pages
are possible since they are enabled for the mem1 object. But
since the main RAM is not backed by a huge page filesystem,
the guest Linux kernel then crashes very quickly after being
started. So in case the we've got "normal" memory without NUMA
and without the global "-mem-path" option, we must not announce
huge pages to the guest. Since this is likely a mis-configuration
by the user, also spill out a message in this case.
Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This adds the ISA 2.06 and later power management instructions
(doze, nap, sleep and rvwinkle) and associated wakeup cause testing
in LPCR
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
[clg: fixed checkpatch.pl errors ]
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
There's no point inlining this, if you hit the exception case you exit
anyway, and not inlining saves about 100K of code size (and cache
footprint).
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
[clg: removed '__attribute__((noinline))' from original patch ]
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>