]> Git Repo - qemu.git/log
qemu.git
5 years agohw/vfio/ap: drop local_err from vfio_ap_realize
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:34 +0000 (20:46 +0300)]
hw/vfio/ap: drop local_err from vfio_ap_realize

No reason for local_err here, use errp directly instead.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
Reviewed-by: Cornelia Huck <[email protected]>
Message-Id: <20191205174635[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agobackends/cryptodev: drop local_err from cryptodev_backend_complete()
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:33 +0000 (20:46 +0300)]
backends/cryptodev: drop local_err from cryptodev_backend_complete()

No reason for local_err here, use errp directly instead.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
Reviewed-by: Gonglei <[email protected]>
Message-Id: <20191205174635[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agoinclude/qom/object.h: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:32 +0000 (20:46 +0300)]
include/qom/object.h: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Message-Id: <20191205174635[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agohw/usb: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:31 +0000 (20:46 +0300)]
hw/usb: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agohw/tpm: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:30 +0000 (20:46 +0300)]
hw/tpm: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Stefan Berger <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agohw/sd: drop extra whitespace in sdhci_sysbus_realize() header
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:29 +0000 (20:46 +0300)]
hw/sd: drop extra whitespace in sdhci_sysbus_realize() header

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agohw/s390x: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:28 +0000 (20:46 +0300)]
hw/s390x: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Cornelia Huck <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: David Hildenbrand <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agomonitor/qmp-cmds: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:27 +0000 (20:46 +0300)]
monitor/qmp-cmds: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agoqga: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:26 +0000 (20:46 +0300)]
qga: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agohw/i386/amd_iommu: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:25 +0000 (20:46 +0300)]
hw/i386/amd_iommu: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Message-Id: <20191205174635[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agoblock/snapshot: rename Error ** parameter to more common errp
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:24 +0000 (20:46 +0300)]
block/snapshot: rename Error ** parameter to more common errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Message-Id: <20191205174635[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agohw/core/qdev: cleanup Error ** variables
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:23 +0000 (20:46 +0300)]
hw/core/qdev: cleanup Error ** variables

Rename Error ** parameter in check_only_migratable to common errp.

In device_set_realized:

 - Move "if (local_err != NULL)" closer to error setters.

 - Drop 'Error **local_errp': it doesn't save any LoCs, but it's very
   unusual.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
Message-Id: <20191205174635[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years ago9pfs: make Error **errp const where it is appropriate
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:22 +0000 (20:46 +0300)]
9pfs: make Error **errp const where it is appropriate

Mostly, Error ** is for returning error from the function, so the
callee sets it. However error_append_security_model_hint and
error_append_socket_sockfd_hint get already filled errp
parameter. They don't change the pointer itself, only change the
internal state of referenced Error object. So we can make it Error
*const * errp, to stress the behavior. It will also help coccinelle
script (in future) to distinguish such cases from common errp usage.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Acked-by: Greg Kurz <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
[Commit message replaced]
Signed-off-by: Markus Armbruster <[email protected]>
5 years agoppc: make Error **errp const where it is appropriate
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:21 +0000 (20:46 +0300)]
ppc: make Error **errp const where it is appropriate

Mostly, Error ** is for returning error from the function, so the
callee sets it. However kvmppc_hint_smt_possible gets already filled
errp parameter. It doesn't change the pointer itself, only change the
internal state of referenced Error object. So we can make it Error
*const * errp, to stress the behavior. It will also help coccinelle
script (in future) to distinguish such cases from common errp usage.

While there, rename the function to
kvmppc_error_append_smt_possible_hint().

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
Message-Id: <20191205174635[email protected]>
Acked-by: David Gibson <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
[Commit message replaced]
Signed-off-by: Markus Armbruster <[email protected]>
5 years agoRevert "ppc: well form kvmppc_hint_smt_possible error hint helper"
Markus Armbruster [Wed, 18 Dec 2019 07:36:27 +0000 (08:36 +0100)]
Revert "ppc: well form kvmppc_hint_smt_possible error hint helper"

This reverts commit cdcca22aabafc0496894ce05c80097684832c7d9.

Commit cdcca22aaba is a superseded version of the next commit that
crept in by accident.  Revert it, so the final version applies.

Signed-off-by: Markus Armbruster <[email protected]>
5 years agoqdev-monitor: make Error **errp const where it is appropriate
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:20 +0000 (20:46 +0300)]
qdev-monitor: make Error **errp const where it is appropriate

Mostly, Error ** is for returning error from the function, so the
callee sets it. However qbus_list_bus and qbus_list_dev get already
filled errp parameter. They don't change the pointer itself, only
change the internal state of referenced Error object. So we can make
it Error *const * errp, to stress the behavior. It will also help
coccinelle script (in future) to distinguish such cases from common
errp usage.

While there, rename the functions to
qbus_error_append_bus_list_hint(), qbus_error_append_dev_list_hint().

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
[Commit message replaced]
Signed-off-by: Markus Armbruster <[email protected]>
5 years agovnc: drop Error pointer indirection in vnc_client_io_error
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:19 +0000 (20:46 +0300)]
vnc: drop Error pointer indirection in vnc_client_io_error

We don't need Error **, as all callers pass local Error object, which
isn't used after the call, or NULL. Use Error * instead.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agohmp: drop Error pointer indirection in hmp_handle_error
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:18 +0000 (20:46 +0300)]
hmp: drop Error pointer indirection in hmp_handle_error

We don't need Error **, as all callers pass local Error object, which
isn't used after the call. Use Error * instead.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Acked-by: Dr. David Alan Gilbert <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agoerror: make Error **errp const where it is appropriate
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:17 +0000 (20:46 +0300)]
error: make Error **errp const where it is appropriate

Mostly, Error ** is for returning error from the function, so the
callee sets it. However these three functions get already filled errp
parameter. They don't change the pointer itself, only change the
internal state of referenced Error object. So we can make it
Error *const * errp, to stress the behavior. It will also help
coccinelle script (in future) to distinguish such cases from common
errp usage.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Message-Id: <20191205174635[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
[Commit message typo fixed]
Signed-off-by: Markus Armbruster <[email protected]>
5 years agonet/net: Clean up variable shadowing in net_client_init()
Vladimir Sementsov-Ogievskiy [Thu, 5 Dec 2019 17:46:16 +0000 (20:46 +0300)]
net/net: Clean up variable shadowing in net_client_init()

Variable int err in inner scope shadows Error *err in outer scope.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Message-Id: <20191205174635[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
5 years agotests-blockjob: Use error_free_or_abort()
Markus Armbruster [Wed, 4 Dec 2019 09:36:25 +0000 (10:36 +0100)]
tests-blockjob: Use error_free_or_abort()

Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Message-Id: <20191204093625[email protected]>

5 years agohw/intc/s390: Simplify error handling in kvm_s390_flic_realize()
Markus Armbruster [Wed, 4 Dec 2019 09:36:24 +0000 (10:36 +0100)]
hw/intc/s390: Simplify error handling in kvm_s390_flic_realize()

Cc: Halil Pasic <[email protected]>
Cc: Cornelia Huck <[email protected]>
Cc: Christian Borntraeger <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Cornelia Huck <[email protected]>
Acked-by: Halil Pasic <[email protected]>
Message-Id: <20191204093625[email protected]>

5 years agoerror: Clean up unusual names of Error * variables
Markus Armbruster [Wed, 4 Dec 2019 09:36:23 +0000 (10:36 +0100)]
error: Clean up unusual names of Error * variables

Local Error * variables are conventionally named @err or @local_err,
and Error ** parameters @errp.  Naming local variables like parameters
is confusing.  Clean that up.

Naming parameters like local variables is also confusing.  Left for
another day.

Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Message-Id: <20191204093625[email protected]>

5 years agomemory-device: Fix memory pre-plug error API violations
Markus Armbruster [Wed, 4 Dec 2019 09:36:17 +0000 (10:36 +0100)]
memory-device: Fix memory pre-plug error API violations

memory_device_get_free_addr() dereferences @errp when
memory_device_check_addable() fails.  That's wrong; see the big
comment in error.h.  Introduced in commit 1b6d6af21b "pc-dimm: factor
out capacity and slot checks into MemoryDevice".

No caller actually passes null.

Fix anyway: splice in a local Error *err, and error_propagate().

Cc: David Hildenbrand <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: David Hildenbrand <[email protected]>
Message-Id: <20191204093625[email protected]>

5 years agoqga: Fix guest-get-fsinfo error API violations
Markus Armbruster [Wed, 4 Dec 2019 09:36:16 +0000 (10:36 +0100)]
qga: Fix guest-get-fsinfo error API violations

build_guest_fsinfo_for_virtual_device() dereferences @errp when
build_guest_fsinfo_for_device() fails.  That's wrong; see the big
comment in error.h.  Introduced in commit 46d4c5723e "qga: Add
guest-get-fsinfo command".

No caller actually passes null.

Fix anyway: splice in a local Error *err, and error_propagate().

Cc: Michael Roth <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191204093625[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]>
5 years agohw/ipmi: Fix realize() error API violations
Markus Armbruster [Wed, 4 Dec 2019 09:36:15 +0000 (10:36 +0100)]
hw/ipmi: Fix realize() error API violations

isa_ipmi_bt_realize(), ipmi_isa_realize(), pci_ipmi_bt_realize(), and
pci_ipmi_kcs_realize() dereference @errp when IPMIInterfaceClass
method init() fails.  That's wrong; see the big comment in error.h.
Introduced in commit 0719029c47 "ipmi: Add an ISA KCS low-level
interface", then imitated in commit a9b74079cb "ipmi: Add a BT
low-level interface" and commit 12f983c6aa "ipmi: Add PCI IPMI
interfaces".

No caller actually passes null.

Fix anyway: splice in a local Error *err, and error_propagate().

Cc: Corey Minyard <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191204093625[email protected]>

5 years agohw/core: Fix fit_load_fdt() error API violations
Markus Armbruster [Wed, 4 Dec 2019 09:36:14 +0000 (10:36 +0100)]
hw/core: Fix fit_load_fdt() error API violations

fit_load_fdt() passes @errp to fit_image_addr(), then recovers from
ENOENT failures.  Passing @errp is wrong, because it works only as
long as @errp is neither @error_fatal nor @error_abort.  Error
recovery dereferences @errp.  That's also wrong; see the big comment
in error.h.  Error recovery can leave *errp pointing to a freed
Error object.  Wrong, it must be null on success.  Messed up in
commit 3eb99edb48 "loader-fit: Wean off error_printf()".

No caller actually passes such values, or uses *errp on success.

Fix anyway: splice in a local Error *err, and error_propagate().

Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191204093625[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]>
5 years agohw/acpi: Fix legacy CPU plug error API violations
Markus Armbruster [Wed, 4 Dec 2019 09:36:13 +0000 (10:36 +0100)]
hw/acpi: Fix legacy CPU plug error API violations

legacy_acpi_cpu_plug_cb() dereferences @errp when
acpi_set_cpu_present_bit() fails.  That's wrong; see the big comment
in error.h.  Introduced in commit cc43364de7 "acpi/cpu-hotplug:
introduce helper function to keep bit setting in one place".

No caller actually passes null, and acpi_set_cpu_present_bit() can't
actually fail.

Fix anyway: drop acpi_set_cpu_present_bit()'s @errp parameter.

Cc: "Michael S. Tsirkin" <[email protected]>
Cc: Igor Mammedov <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Igor Mammedov <[email protected]>
Message-Id: <20191204093625[email protected]>
Reviewed-by: Michael S. Tsirkin <[email protected]>
5 years agoexec: Fix file_ram_alloc() error API violations
Markus Armbruster [Wed, 4 Dec 2019 09:36:12 +0000 (10:36 +0100)]
exec: Fix file_ram_alloc() error API violations

When os_mem_prealloc() fails, file_ram_alloc() calls qemu_ram_munmap()
and returns null.  Except it doesn't when its @errp argument is null,
because it checks for failure with (errp && *errp).  Introduced in
commit 056b68af77 "fix qemu exit on memory hotplug when allocation
fails at prealloc time".

No caller actually passes null.

Fix anyway: splice in a local Error *err, and error_propagate().

Cc: Igor Mammedov <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Igor Mammedov <[email protected]>
Message-Id: <20191204093625[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
5 years agotests: Clean up initialization of Error *err variables
Markus Armbruster [Wed, 4 Dec 2019 09:36:11 +0000 (10:36 +0100)]
tests: Clean up initialization of Error *err variables

Declaring a local Error *err without initializer looks suspicious.
Fuse the declaration with the initialization to avoid that.

Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191204093625[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]>
5 years agoio: Fix Error usage in a comment <example>
Markus Armbruster [Wed, 4 Dec 2019 09:36:10 +0000 (10:36 +0100)]
io: Fix Error usage in a comment <example>

Cc: "Daniel P. Berrangé" <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191204093625[email protected]>
Acked-by: Daniel P. Berrangé <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]>
5 years agocrypto: Fix typo in QCryptoTLSSession's <example> comment
Markus Armbruster [Wed, 4 Dec 2019 09:36:09 +0000 (10:36 +0100)]
crypto: Fix typo in QCryptoTLSSession's <example> comment

Cc: "Daniel P. Berrangé" <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191204093625[email protected]>
Acked-by: Daniel P. Berrangé <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]>
5 years agocrypto: Fix certificate file error handling crash bug
Markus Armbruster [Wed, 4 Dec 2019 09:36:08 +0000 (10:36 +0100)]
crypto: Fix certificate file error handling crash bug

qcrypto_tls_creds_load_cert() passes uninitialized GError *gerr by
reference to g_file_get_contents().  When g_file_get_contents() fails,
it'll try to set a GError.  Unless @gerr is null by dumb luck, this
logs a ERROR_OVERWRITTEN_WARNING warning message and leaves @gerr
unchanged.  qcrypto_tls_creds_load_cert() then dereferences the
uninitialized @gerr.

Fix by initializing @gerr properly.

Fixes: 9a2fd4347c40321f5cbb4ab4220e759fcbf87d03
Cc: "Daniel P. Berrangé" <[email protected]>
Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191204093625[email protected]>
Acked-by: Daniel P. Berrangé <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]>
5 years agoerror: Fix -msg timestamp default
Markus Armbruster [Thu, 10 Oct 2019 08:15:08 +0000 (10:15 +0200)]
error: Fix -msg timestamp default

-msg parameter "timestamp" defaults to "off" if you don't specify msg,
and to "on" if you do.  Messed up right in commit 5e2ac51917 "add
timestamp to error_report()".  Mostly harmless, because "timestamp" is
the only parameter, so "if you do" is "-msg ''", which nobody does.

Change the default to "off" no matter what.

While there, rename enable_timestamp_msg to error_with_timestamp, and
polish documentation.

Signed-off-by: Markus Armbruster <[email protected]>
Message-Id: <20191010081508[email protected]>

5 years agoMerge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-12-17' into...
Peter Maydell [Tue, 17 Dec 2019 15:55:20 +0000 (15:55 +0000)]
Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-12-17' into staging

* Removal of the deprecated bluetooth code
* Some qtest and misc patches

# gpg: Signature made Tue 17 Dec 2019 08:09:08 GMT
# gpg:                using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg:                issuer "[email protected]"
# gpg: Good signature from "Thomas Huth <[email protected]>" [full]
# gpg:                 aka "Thomas Huth <[email protected]>" [full]
# gpg:                 aka "Thomas Huth <[email protected]>" [full]
# gpg:                 aka "Thomas Huth <[email protected]>" [unknown]
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3  EAB9 2ED9 D774 FE70 2DB5

* remotes/huth-gitlab/tags/pull-request-2019-12-17:
  tests: use g_test_rand_int
  tests/Makefile: Fix check-report.* targets shown in check-help
  glib: use portable g_setenv()
  hw/misc/ivshmem: Bury dead legacy INTx code
  pseries: disable migration-test if /dev/kvm cannot be used
  tests: fix modules-test 'duplicate test case' error
  Remove libbluetooth / bluez from the CI tests
  Remove the core bluetooth code
  hw/usb: Remove the USB bluetooth dongle device
  hw/arm/nseries: Replace the bluetooth chardev with a "null" chardev

Signed-off-by: Peter Maydell <[email protected]>
5 years agoMerge remote-tracking branch 'remotes/cleber/tags/python-next-pull-request' into...
Peter Maydell [Tue, 17 Dec 2019 14:34:31 +0000 (14:34 +0000)]
Merge remote-tracking branch 'remotes/cleber/tags/python-next-pull-request' into staging

Python queue 2019-12-17

# gpg: Signature made Tue 17 Dec 2019 05:12:43 GMT
# gpg:                using RSA key 7ABB96EB8B46B94D5E0FE9BB657E8D33A5F209F3
# gpg: Good signature from "Cleber Rosa <[email protected]>" [marginal]
# 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: 7ABB 96EB 8B46 B94D 5E0F  E9BB 657E 8D33 A5F2 09F3

* remotes/cleber/tags/python-next-pull-request:
  python/qemu: Remove unneeded imports in __init__
  python/qemu: accel: Add tcg_available() method
  python/qemu: accel: Strengthen kvm_available() checks
  python/qemu: accel: Add list_accel() method
  python/qemu: Move kvm_available() to its own module
  Acceptance tests: use relative location for tests
  Acceptance tests: use avocado tags for machine type
  Acceptance tests: introduce utility method for tags unique vals
  Acceptance test x86_cpu_model_versions: use default vm
  tests/acceptance: Makes linux_initrd and empty_cpu_model use QEMUMachine
  python/qemu: Add set_qmp_monitor() to QEMUMachine
  analyze-migration.py: replace numpy with python 3.2
  analyze-migration.py: fix find() type error
  Revert "Acceptance test: cancel test if m68k kernel packages goes missing"
  tests/boot_linux_console: Fetch assets from Debian snapshot archives

Signed-off-by: Peter Maydell <[email protected]>
5 years agoMerge remote-tracking branch 'remotes/dgibson/tags/ppc-for-5.0-20191217' into staging
Peter Maydell [Tue, 17 Dec 2019 11:52:04 +0000 (11:52 +0000)]
Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-5.0-20191217' into staging

ppc patch queue 2019-12-17

This is the first pull request for the qemu-5.0 branch.  It has a lot
of accumulated changes, including:

    * SLOF update to support boot using the IOMMU (will become
      necessary for secure guests)

    * Clean ups to pnv handling of chip models

    * A number of extensions to the powernv machine model

    * TCG extensions to allow powernv emulated systems to run KVM guests

    * Outline support for POWER10 chips in powernv

    * Cleanups to the ibm,client-architecture-support feature negotiation path

    * XIVE reworks to better handle the powernv machine

    * Improvements to not waste interrupt queues and other semi-scarce
      resources when using XIVE under KVM

# gpg: Signature made Tue 17 Dec 2019 04:42:20 GMT
# gpg:                using RSA key 75F46586AE61A66CC44E87DC6C38CACA20D9B392
# gpg: Good signature from "David Gibson <[email protected]>" [full]
# gpg:                 aka "David Gibson (Red Hat) <[email protected]>" [full]
# gpg:                 aka "David Gibson (ozlabs.org) <[email protected]>" [full]
# gpg:                 aka "David Gibson (kernel.org) <[email protected]>" [unknown]
# Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392

* remotes/dgibson/tags/ppc-for-5.0-20191217: (88 commits)
  pseries: Update SLOF firmware image
  ppc/pnv: Drop PnvChipClass::type
  ppc/pnv: Introduce PnvChipClass::xscom_pcba() method
  ppc/pnv: Drop pnv_chip_is_power9() and pnv_chip_is_power10() helpers
  ppc/pnv: Pass content of the "compatible" property to pnv_dt_xscom()
  ppc/pnv: Pass XSCOM base address and address size to pnv_dt_xscom()
  ppc/pnv: Introduce PnvChipClass::xscom_core_base() method
  ppc/pnv: Introduce PnvChipClass::intc_print_info() method
  ppc/pnv: Drop pnv_is_power9() and pnv_is_power10() helpers
  ppc/pnv: Introduce PnvMachineClass::dt_power_mgt()
  ppc/pnv: Introduce PnvMachineClass and PnvMachineClass::compat
  ppc/pnv: Drop PnvPsiClass::chip_type
  ppc/pnv: Introduce PnvPsiClass::compat
  ppc: Drop useless extern annotation for functions
  ppc/pnv: Fix OCC common area region mapping
  ppc/pnv: Introduce PBA registers
  ppc/pnv: Make PnvXScomInterface an incomplete type
  ppc/pnv: populate the DT with realized XSCOM devices
  ppc/pnv: Loop on the whole hierarchy to populate the DT with the XSCOM nodes
  target/ppc: Add SPR TBU40
  ...

Signed-off-by: Peter Maydell <[email protected]>
5 years agoMerge remote-tracking branch 'remotes/ehabkost/tags/x86-next-pull-request' into staging
Peter Maydell [Tue, 17 Dec 2019 10:57:07 +0000 (10:57 +0000)]
Merge remote-tracking branch 'remotes/ehabkost/tags/x86-next-pull-request' into staging

x86 queue, 2019-12-16

Feature:
* Cooperlake CPU model

Cleanups:
* Use g_autofree in a few places

# gpg: Signature made Mon 16 Dec 2019 19:36:51 GMT
# gpg:                using RSA key 5A322FD5ABC4D3DBACCFD1AA2807936F984DC5A6
# gpg:                issuer "[email protected]"
# gpg: Good signature from "Eduardo Habkost <[email protected]>" [full]
# Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF  D1AA 2807 936F 984D C5A6

* remotes/ehabkost/tags/x86-next-pull-request:
  i386: Use g_autofree in a few places
  i386: Add new CPU model Cooperlake
  i386: Add macro for stibp
  i386: Add MSR feature bit for MDS-NO

Signed-off-by: Peter Maydell <[email protected]>
5 years agotests: use g_test_rand_int
Paolo Bonzini [Thu, 12 Dec 2019 01:17:58 +0000 (02:17 +0100)]
tests: use g_test_rand_int

g_test_rand_int provides a reproducible random integer number, using a
different number seed every time but allowing reproduction using the
--seed command line option.  It is thus better suited to tests than
g_random_int or random.

Signed-off-by: Paolo Bonzini <[email protected]>
Message-Id: <1576113478[email protected]>
Reviewed-by: Thomas Huth <[email protected]>
Reviewed-by: Richard Henderson <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agotests/Makefile: Fix check-report.* targets shown in check-help
Wainer dos Santos Moschetta [Wed, 11 Dec 2019 20:44:27 +0000 (15:44 -0500)]
tests/Makefile: Fix check-report.* targets shown in check-help

The check-report.html and check-report.xml targets were replaced
with check-report.tap in commit 9df43317b82 but the check-help
text was not updated so it still lists check-report.html.

Fixes: 9df43317b82
Signed-off-by: Wainer dos Santos Moschetta <[email protected]>
Message-Id: <20191211204427[email protected]>
Reviewed-by: Thomas Huth <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agoglib: use portable g_setenv()
Marc-André Lureau [Wed, 11 Dec 2019 14:23:28 +0000 (15:23 +0100)]
glib: use portable g_setenv()

We have a setenv() wrapper in os-win32.c that no one is actually using.
Drop it and change to g_setenv() uniformly.

Signed-off-by: Marc-André Lureau <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
Message-Id: <1576074210[email protected]>
Reviewed-by: Thomas Huth <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agohw/misc/ivshmem: Bury dead legacy INTx code
Markus Armbruster [Thu, 5 Dec 2019 20:35:57 +0000 (21:35 +0100)]
hw/misc/ivshmem: Bury dead legacy INTx code

Devices "ivshmem-plain" and "ivshmem-doorbell" support only MSI-X.
Config space register Interrupt Pin is zero.  Device "ivshmem"
additionally supported legacy INTx, but it was removed in commit
5a0e75f0a9 "hw/misc/ivshmem: Remove deprecated "ivshmem" legacy
device".  The commit left ivshmem_update_irq() behind.  Since the
Interrupt Pin register is zero, the function does nothing.  Remove it.

Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Thomas Huth <[email protected]>
Message-Id: <20191205203557[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agopseries: disable migration-test if /dev/kvm cannot be used
Laurent Vivier [Wed, 20 Nov 2019 17:09:55 +0000 (18:09 +0100)]
pseries: disable migration-test if /dev/kvm cannot be used

On ppc64, migration-test only works with kvm_hv, and we already
have a check to verify the module is loaded.

kvm_hv module can be loaded in memory and /sys/module/kvm_hv exists,
but on some systems (like build systems) /dev/kvm can be missing
(by administrators choice).

And as kvm_hv exists test-migration is started but QEMU falls back to
TCG because it cannot be used:

    Could not access KVM kernel module: No such file or directory
    failed to initialize KVM: No such file or directory
    Back to tcg accelerator

And as the test is done with TCG, it fails.

As for s390x, we must check for the existence and the access rights
of /dev/kvm.

Reported-by: Cole Robinson <[email protected]>
Signed-off-by: Laurent Vivier <[email protected]>
Message-Id: <20191120170955[email protected]>
Reviewed-by: Thomas Huth <[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
Reviewed-by: Juan Quintela <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agotests: fix modules-test 'duplicate test case' error
Cole Robinson [Wed, 13 Nov 2019 21:09:35 +0000 (16:09 -0500)]
tests: fix modules-test 'duplicate test case' error

./configure --enable-sdl --audio-drv-list=sdl --enable-modules

Will generate two identical test names: /$arch/module/load/sdl
Which generates an error like:

(tests/modules-test:23814): GLib-ERROR **: 18:23:06.359: duplicate test case path: /aarch64//module/load/sdl

Add the subsystem prefix in the name as well, so instead we get:

/$arch/module/load/audio-sdl
/$arch/module/load/ui-sdl

Signed-off-by: Cole Robinson <[email protected]>
Message-Id: <d64c9aa098cc6e5c0b638438c4959eddfa7e24e2.1573679311[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
Reviewed-by: Thomas Huth <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agoRemove libbluetooth / bluez from the CI tests
Thomas Huth [Wed, 20 Nov 2019 09:10:14 +0000 (10:10 +0100)]
Remove libbluetooth / bluez from the CI tests

Since the bluetooth code has been removed, we don't need to test
with this library anymore.

Message-Id: <20191120091014[email protected]>
Acked-by: Paolo Bonzini <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agoRemove the core bluetooth code
Thomas Huth [Wed, 20 Nov 2019 09:10:13 +0000 (10:10 +0100)]
Remove the core bluetooth code

It's been deprecated since QEMU v3.1. We've explicitly asked in the
deprecation message that people should speak up on qemu-devel in case
they are still actively using the bluetooth part of QEMU, but nobody
ever replied that they are really still using it.

I've tried it on my own to use this bluetooth subsystem for one of my
guests, but I was also not able to get it running anymore: When I was
trying to pass-through a real bluetooth device, either the guest did
not see the device at all, or the guest crashed.

Even worse for the emulated device: When running

 qemu-system-x86_64 -bt device:keyboard

QEMU crashes once you hit a key.

So it seems like the bluetooth stack is not only neglected, it is
completely bitrotten, as far as I can tell. The only attention that
this code got during the past years were some CVEs that have been
spotted there. So this code is a burden for the developers, without
any real benefit anymore. Time to remove it.

Note: hw/bt/Kconfig only gets cleared but not removed here yet.
Otherwise there is a problem with the *-softmmu/config-devices.mak.d
dependency files - they still contain a reference to this file which
gets evaluated first on some build hosts, before the file gets
properly recreated. To avoid breaking these builders, we still need
the file around for some time. It will get removed in a couple of
weeks instead.

Message-Id: <20191120091014[email protected]>
Reviewed-by: Ján Tomko <[email protected]>
Acked-by: Paolo Bonzini <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
5 years agopseries: Update SLOF firmware image
Alexey Kardashevskiy [Tue, 17 Dec 2019 00:31:54 +0000 (11:31 +1100)]
pseries: Update SLOF firmware image

This fixes PCI bridges support regression.

This enables IOMMU support in virtio drivers.

The full list of changes is:

Alexey Kardashevskiy (12):
      allocator: Fix format strings for DEBUG
      virtio: Make virtio_set_qaddr static
      client: Load initramdisk location
      sloffs: Fix -Wunused-result gcc warnings in read/write
      pci-phb: Reimplement dma-map-in/out
      virtio: Store queue descriptors in virtio_device
      virtio-net: Init queues after features negotiation
      virtio: Enable IOMMU
      ibm,client-architecture-support: Fix stack handling
      fdt: Fix updating the tree at H_CAS
      version: update to 20191206
      version: update to 20191217

Michael Roth (1):
      dma: Define default dma methods for using by client/package instances

Signed-off-by: Alexey Kardashevskiy <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Drop PnvChipClass::type
Greg Kurz [Fri, 13 Dec 2019 12:00:41 +0000 (13:00 +0100)]
ppc/pnv: Drop PnvChipClass::type

It isn't used anymore.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623844102.360005.12070225703151669294[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce PnvChipClass::xscom_pcba() method
Greg Kurz [Fri, 13 Dec 2019 12:00:35 +0000 (13:00 +0100)]
ppc/pnv: Introduce PnvChipClass::xscom_pcba() method

The XSCOM bus is implemented with a QOM interface, which is mostly
generic from a CPU type standpoint, except for the computation of
addresses on the Pervasive Connect Bus (PCB) network. This is handled
by the pnv_xscom_pcba() function with a switch statement based on
the chip_type class level attribute of the CPU chip.

This can be achieved using QOM. Also the address argument is masked with
PNV_XSCOM_SIZE - 1, which is for POWER8 only. Addresses may have different
sizes with other CPU types. Have each CPU chip type handle the appropriate
computation with a QOM xscom_pcba() method.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623843543.360005.13996472463887521794[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Drop pnv_chip_is_power9() and pnv_chip_is_power10() helpers
Greg Kurz [Fri, 13 Dec 2019 12:00:29 +0000 (13:00 +0100)]
ppc/pnv: Drop pnv_chip_is_power9() and pnv_chip_is_power10() helpers

They aren't used anymore.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623842986.360005.1787401623906380181[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Pass content of the "compatible" property to pnv_dt_xscom()
Greg Kurz [Fri, 13 Dec 2019 12:00:24 +0000 (13:00 +0100)]
ppc/pnv: Pass content of the "compatible" property to pnv_dt_xscom()

Since pnv_dt_xscom() is called from chip specific dt_populate() hooks,
it shouldn't have to guess the chip type in order to populate the
"compatible" property. Just pass the compat string and its size as
arguments.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623842430.360005.9513965612524265862[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Pass XSCOM base address and address size to pnv_dt_xscom()
Greg Kurz [Fri, 13 Dec 2019 12:00:18 +0000 (13:00 +0100)]
ppc/pnv: Pass XSCOM base address and address size to pnv_dt_xscom()

Since pnv_dt_xscom() is called from chip specific dt_populate() hooks,
it shouldn't have to guess the chip type in order to populate the "reg"
property. Just pass the base address and address size as arguments.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623841868.360005.17577624823547136435[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce PnvChipClass::xscom_core_base() method
Greg Kurz [Fri, 13 Dec 2019 12:00:13 +0000 (13:00 +0100)]
ppc/pnv: Introduce PnvChipClass::xscom_core_base() method

The pnv_chip_core_realize() function configures the XSCOM MMIO subregion
for each core of a single chip. The base address of the subregion depends
on the CPU type. Its computation is currently open-code using the
pnv_chip_is_powerXX() helpers. This can be achieved with QOM. Introduce
a method for this in the base chip class and implement it in child classes.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623841311.360005.4705705734873339545[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce PnvChipClass::intc_print_info() method
Greg Kurz [Fri, 13 Dec 2019 12:00:07 +0000 (13:00 +0100)]
ppc/pnv: Introduce PnvChipClass::intc_print_info() method

The pnv_pic_print_info() callback checks the type of the chip in order
to forward to the request appropriate interrupt controller. This can
be achieved with QOM. Introduce a method for this in the base chip class
and implement it in child classes.

This also prepares ground for the upcoming interrupt controller of POWER10
chips.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623840755.360005.5002022339473369934[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Drop pnv_is_power9() and pnv_is_power10() helpers
Greg Kurz [Fri, 13 Dec 2019 12:00:02 +0000 (13:00 +0100)]
ppc/pnv: Drop pnv_is_power9() and pnv_is_power10() helpers

They aren't used anymore.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623840200.360005.1300941274565357363[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce PnvMachineClass::dt_power_mgt()
Greg Kurz [Fri, 13 Dec 2019 11:59:56 +0000 (12:59 +0100)]
ppc/pnv: Introduce PnvMachineClass::dt_power_mgt()

We add an extra node to advertise power management on some machines,
namely powernv9 and powernv10. This is achieved by using the
pnv_is_power9() and pnv_is_power10() helpers.

This can be achieved with QOM. Add a method to the base class for
powernv machines and have it implemented by machine types that
support power management instead.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623839642.360005.9243510140436689941[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce PnvMachineClass and PnvMachineClass::compat
Greg Kurz [Fri, 13 Dec 2019 11:59:50 +0000 (12:59 +0100)]
ppc/pnv: Introduce PnvMachineClass and PnvMachineClass::compat

The pnv_dt_create() function generates different contents for the
"compatible" property of the root node in the DT, depending on the
CPU type. This is open coded with multiple ifs using pnv_is_powerXX()
helpers.

It seems cleaner to achieve with QOM. Introduce a base class for the
powernv machine and a compat attribute that each child class can use
to provide the value for the "compatible" property.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623839085.360005.4046508784077843216[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
[dwg: Folded in small fix Greg spotted after posting]
Signed-off-by: David Gibson <[email protected]>
5 years agopython/qemu: Remove unneeded imports in __init__
Wainer dos Santos Moschetta [Mon, 16 Dec 2019 19:14:38 +0000 (16:14 -0300)]
python/qemu: Remove unneeded imports in __init__

__init_.py import some sub-modules unnecessarily. So let's
clean it up.

Signed-off-by: Wainer dos Santos Moschetta <[email protected]>
Suggested-by: Cleber Rosa <[email protected]>
Reviewed-by: Cleber Rosa <[email protected]>
Tested-by: Cleber Rosa <[email protected]>
Message-Id: <20191216191438[email protected]>
Signed-off-by: Cleber Rosa <[email protected]>
5 years agoppc/pnv: Drop PnvPsiClass::chip_type
Greg Kurz [Fri, 13 Dec 2019 11:59:45 +0000 (12:59 +0100)]
ppc/pnv: Drop PnvPsiClass::chip_type

It isn't used anymore.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623838530.360005.15470128760871845396[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce PnvPsiClass::compat
Greg Kurz [Fri, 13 Dec 2019 11:59:39 +0000 (12:59 +0100)]
ppc/pnv: Introduce PnvPsiClass::compat

The Processor Service Interface (PSI) model has a chip_type class level
attribute, which is used to generate the content of the "compatible" DT
property according to the CPU type.

Since the PSI model already has specialized classes for each supported
CPU type, it seems cleaner to achieve this with QOM. Provide the content
of the "compatible" property with a new class level attribute.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157623837974.360005.14706607446188964477[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc: Drop useless extern annotation for functions
Greg Kurz [Fri, 13 Dec 2019 11:59:34 +0000 (12:59 +0100)]
ppc: Drop useless extern annotation for functions

Signed-off-by: Greg Kurz <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Message-Id: <157623837421.360005.412120366652768311[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Fix OCC common area region mapping
Cédric Le Goater [Wed, 11 Dec 2019 08:29:12 +0000 (09:29 +0100)]
ppc/pnv: Fix OCC common area region mapping

The OCC common area is mapped at a unique address on the system and
each OCC is assigned a segment to expose its sensor data :

  -------------------------------------------------------------------------
  | Start (Offset from | End           | Size     |Description            |
  | BAR2 base address) |               |          |                       |
  -------------------------------------------------------------------------
  |    0x00580000      |  0x005A57FF   |150kB     |OCC 0 Sensor Data Block|
  |    0x005A5800      |  0x005CAFFF   |150kB     |OCC 1 Sensor Data Block|
  |        :           |       :       |  :       |            :          |
  |    0x00686800      |  0x006ABFFF   |150kB     |OCC 7 Sensor Data Block|
  |    0x006AC000      |  0x006FFFFF   |336kB     |Reserved               |
  -------------------------------------------------------------------------

Maximum size is 1.5MB.

We could define a "OCC common area" memory region at the machine level
and sub regions for each OCC. But it adds some extra complexity to the
models. Fix the current layout with a simpler model.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191211082912[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce PBA registers
Cédric Le Goater [Wed, 11 Dec 2019 08:29:11 +0000 (09:29 +0100)]
ppc/pnv: Introduce PBA registers

The PBA bridge unit (Power Bus Access) connects the OCC (On Chip
Controller) to the Power bus and System Memory. The PBA is used to
gather sensor data, for power management, for sleep states, for
initial boot, among other things.

The PBA logic provides a set of four registers PowerBus Access Base
Address Registers (PBABAR0..3) which map the OCC address space to the
PowerBus space. These registers are setup by the initial FW and define
the PowerBus Range of system memory that can be accessed by PBA.

The current modeling of the PBABAR registers is done under the common
XSCOM handlers. We introduce a specific XSCOM regions for these
registers and fix :

 - BAR sizes and BAR masks
 - The mapping of the OCC common area. It is common to all chips and
   should be mapped once.  We will address per-OCC area in the next
   change.
 - OCC common area is in BAR 3 on P8

Inspired by previous work of Balamuruhan S <[email protected]>

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191211082912[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Make PnvXScomInterface an incomplete type
Greg Kurz [Wed, 11 Dec 2019 16:04:15 +0000 (17:04 +0100)]
ppc/pnv: Make PnvXScomInterface an incomplete type

PnvXScomInterface is an interface instance. It should never be
dereferenced. Drop the dummy type definition for extra safety,
which is the common practice with QOM interfaces.

While here also convert the bogus OBJECT_CHECK() to INTERFACE_CHECK().

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157608025541.186670.1577861507610404326[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: populate the DT with realized XSCOM devices
Cédric Le Goater [Tue, 10 Dec 2019 13:58:45 +0000 (14:58 +0100)]
ppc/pnv: populate the DT with realized XSCOM devices

Some devices could be initialized in the instance_init handler but not
realized for configuration reasons. Nodes should not be added in the DT
for such devices.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191210135845[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Loop on the whole hierarchy to populate the DT with the XSCOM nodes
Cédric Le Goater [Tue, 10 Dec 2019 13:58:44 +0000 (14:58 +0100)]
ppc/pnv: Loop on the whole hierarchy to populate the DT with the XSCOM nodes

Some PnvXScomInterface objects lie a bit deeper (PnvPBCQState) than
the first layer, so we need to loop on the whole object hierarchy to
catch them.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191210135845[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
[dwg: Corrected error in comment]
Signed-off-by: David Gibson <[email protected]>
5 years agotarget/ppc: Add SPR TBU40
Suraj Jitindar Singh [Thu, 28 Nov 2019 13:46:57 +0000 (14:46 +0100)]
target/ppc: Add SPR TBU40

The spr TBU40 is used to set the upper 40 bits of the timebase
register, present on POWER5+ and later processors.

This register can only be written by the hypervisor, and cannot be read.

Signed-off-by: Suraj Jitindar Singh <[email protected]>
Reviewed-by: David Gibson <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191128134700[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agotarget/ppc: Add SPR ASDR
Suraj Jitindar Singh [Thu, 28 Nov 2019 13:46:56 +0000 (14:46 +0100)]
target/ppc: Add SPR ASDR

The Access Segment Descriptor Register (ASDR) provides information about
the storage element when taking a hypervisor storage interrupt. When
performing nested radix address translation, this is normally the guest
real address. This register is present on POWER9 processors and later.

Implement the ADSR, note read and write access is limited to the
hypervisor.

Signed-off-by: Suraj Jitindar Singh <[email protected]>
Reviewed-by: David Gibson <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191128134700[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agotarget/ppc: Work [S]PURR implementation and add HV support
Suraj Jitindar Singh [Thu, 28 Nov 2019 13:46:55 +0000 (14:46 +0100)]
target/ppc: Work [S]PURR implementation and add HV support

The Processor Utilisation of Resources Register (PURR) and Scaled
Processor Utilisation of Resources Register (SPURR) provide an estimate
of the resources used by the thread, present on POWER7 and later
processors.

Currently the [S]PURR registers simply count at the rate of the
timebase.

Preserve this behaviour but rework the implementation to store an offset
like the timebase rather than doing the calculation manually. Also allow
hypervisor write access to the register along with the currently
available read access.

Signed-off-by: Suraj Jitindar Singh <[email protected]>
Reviewed-by: David Gibson <[email protected]>
[ clg: rebased on current ppc tree ]
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191128134700[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agotarget/ppc: Implement the VTB for HV access
Suraj Jitindar Singh [Thu, 28 Nov 2019 13:46:54 +0000 (14:46 +0100)]
target/ppc: Implement the VTB for HV access

The virtual timebase register (VTB) is a 64-bit register which
increments at the same rate as the timebase register, present on POWER8
and later processors.

The register is able to be read/written by the hypervisor and read by
the supervisor. All other accesses are illegal.

Currently the VTB is just an alias for the timebase (TB) register.

Implement the VTB so that is can be read/written independent of the TB.
Make use of the existing method for accessing timebase facilities where
by the compensation is stored and used to compute the value on reads/is
updated on writes.

Signed-off-by: Suraj Jitindar Singh <[email protected]>
[ clg: rebased on current ppc tree ]
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191128134700[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: add a LPC Controller model for POWER10
Cédric Le Goater [Thu, 5 Dec 2019 18:44:54 +0000 (19:44 +0100)]
ppc/pnv: add a LPC Controller model for POWER10

Same a POWER9, only the MMIO window changes.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191205184454[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: add a PSI bridge model for POWER10
Cédric Le Goater [Thu, 5 Dec 2019 18:44:53 +0000 (19:44 +0100)]
ppc/pnv: add a PSI bridge model for POWER10

The POWER10 PSIHB controller is very similar to the one on POWER9. We
should probably introduce a common PnvPsiXive object.

The ESB page size should be changed to 64k when P10 support is ready.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191205184454[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/psi: cleanup definitions
Cédric Le Goater [Thu, 5 Dec 2019 18:44:52 +0000 (19:44 +0100)]
ppc/psi: cleanup definitions

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191205184454[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce a POWER10 PnvChip and a powernv10 machine
Cédric Le Goater [Thu, 5 Dec 2019 18:44:51 +0000 (19:44 +0100)]
ppc/pnv: Introduce a POWER10 PnvChip and a powernv10 machine

This is an empty shell with the XSCOM bus and cores. The chip controllers
will come later.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191205184454[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agotarget/ppc: Add POWER10 DD1.0 model information
Cédric Le Goater [Thu, 5 Dec 2019 18:44:50 +0000 (19:44 +0100)]
target/ppc: Add POWER10 DD1.0 model information

This includes in QEMU a new CPU model for the POWER10 processor with
the same capabilities of a POWER9 process. The model will be extended
when support is completed.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191205184454[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc: Make PPCVirtualHypervisor an incomplete type
Greg Kurz [Mon, 9 Dec 2019 13:28:00 +0000 (14:28 +0100)]
ppc: Make PPCVirtualHypervisor an incomplete type

PPCVirtualHypervisor is an interface instance. It should never be
dereferenced. Drop the dummy type definition for extra safety, which
is the common practice with QOM interfaces.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157589808041.21182.18121655959115011353[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc: Ignore the CPU_INTERRUPT_EXITTB interrupt with KVM
Greg Kurz [Wed, 4 Dec 2019 19:43:54 +0000 (20:43 +0100)]
ppc: Ignore the CPU_INTERRUPT_EXITTB interrupt with KVM

This only makes sense with an emulated CPU. Don't set the bit in
CPUState::interrupt_request when using KVM to avoid confusions.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157548863423.3650476.16424649423510075159[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc: Don't use CPUPPCState::irq_input_state with modern Book3s CPU models
Greg Kurz [Wed, 4 Dec 2019 19:43:48 +0000 (20:43 +0100)]
ppc: Don't use CPUPPCState::irq_input_state with modern Book3s CPU models

The power7_set_irq() and power9_set_irq() functions set this but it is
never used actually. Modern Book3s compatible CPUs are only supported
by the pnv and spapr machines. They have an interrupt controller, XICS
for POWER7/8 and XIVE for POWER9, whose models don't require to track
IRQ input states at the CPU level.

Drop these lines to avoid confusion.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157548862861.3650476.16622818876928044450[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoxics: Don't deassert outputs
Greg Kurz [Wed, 4 Dec 2019 19:43:43 +0000 (20:43 +0100)]
xics: Don't deassert outputs

The correct way to do this is to deassert the input pins on the CPU side.
This is the case since a previous change.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157548862298.3650476.1228720391270249433[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc: Deassert the external interrupt pin in KVM on reset
Greg Kurz [Wed, 4 Dec 2019 19:43:37 +0000 (20:43 +0100)]
ppc: Deassert the external interrupt pin in KVM on reset

When a CPU is reset, QEMU makes sure no interrupt is pending by clearing
CPUPPCstate::pending_interrupts in ppc_cpu_reset(). In the case of a
complete machine emulation, eg. a sPAPR machine, an external interrupt
request could still be pending in KVM though, eg. an IPI. It will be
eventually presented to the guest, which is supposed to acknowledge it at
the interrupt controller. If the interrupt controller is emulated in QEMU,
either XICS or XIVE, ppc_set_irq() won't deassert the external interrupt
pin in KVM since it isn't pending anymore for QEMU. When the vCPU re-enters
the guest, the interrupt request is still pending and the vCPU will try
again to acknowledge it. This causes an infinite loop and eventually hangs
the guest.

The code has been broken since the beginning. The issue wasn't hit before
because accel=kvm,kernel-irqchip=off is an awkward setup that never got
used until recently with the LC92x IBM systems (aka, Boston).

Add a ppc_irq_reset() function to do the necessary cleanup, ie. deassert
the IRQ pins of the CPU in QEMU and most importantly the external interrupt
pin for this vCPU in KVM.

Reported-by: Satheesh Rajendran <[email protected]>
Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157548861740.3650476.16879693165328764758[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agospapr: Simplify ovec diff
David Gibson [Fri, 29 Nov 2019 05:23:21 +0000 (16:23 +1100)]
spapr: Simplify ovec diff

spapr_ovec_diff(ov, old, new) has somewhat complex semantics.  ov is set
to those bits which are in new but not old, and it returns as a boolean
whether or not there are any bits in old but not new.

It turns out that both callers only care about the second, not the first.
This is basically equivalent to a bitmap subset operation, which is easier
to understand and implement.  So replace spapr_ovec_diff() with
spapr_ovec_subset().

Cc: Mike Roth <[email protected]>
Signed-off-by: David Gibson <[email protected]>
Reviewed-by: Cedric Le Goater <[email protected]>
5 years agospapr: Fold h_cas_compose_response() into h_client_architecture_support()
David Gibson [Fri, 29 Nov 2019 04:00:58 +0000 (15:00 +1100)]
spapr: Fold h_cas_compose_response() into h_client_architecture_support()

spapr_h_cas_compose_response() handles the last piece of the PAPR feature
negotiation process invoked via the ibm,client-architecture-support OF
call.  Its only caller is h_client_architecture_support() which handles
most of the rest of that process.

I believe it was placed in a separate file originally to handle some
fiddly dependencies between functions, but mostly it's just confusing
to have the CAS process split into two pieces like this.  Now that
compose response is simplified (by just generating the whole device
tree anew), it's cleaner to just fold it into
h_client_architecture_support().

Signed-off-by: David Gibson <[email protected]>
Reviewed-by: Cedric Le Goater <[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
5 years agospapr: Improve handling of fdt buffer size
David Gibson [Fri, 18 Oct 2019 10:25:49 +0000 (21:25 +1100)]
spapr: Improve handling of fdt buffer size

Previously, spapr_build_fdt() constructed the device tree in a fixed
buffer of size FDT_MAX_SIZE.  This is a bit inflexible, but more
importantly it's awkward for the case where we use it during CAS.  In
that case the guest firmware supplies a buffer and we have to
awkwardly check that what we generated fits into it afterwards, after
doing a lot of size checks during spapr_build_fdt().

Simplify this by having spapr_build_fdt() take a 'space' parameter.
For the CAS case, we pass in the buffer size provided by SLOF, for the
machine init case, we continue to pass FDT_MAX_SIZE.

Signed-off-by: David Gibson <[email protected]>
Reviewed-by: Cedric Le Goater <[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
5 years agospapr: Don't trigger a CAS reboot for XICS/XIVE mode changeover
David Gibson [Fri, 18 Oct 2019 04:19:31 +0000 (15:19 +1100)]
spapr: Don't trigger a CAS reboot for XICS/XIVE mode changeover

PAPR allows the interrupt controller used on a POWER9 machine (XICS or
XIVE) to be selected by the guest operating system, by using the
ibm,client-architecture-support (CAS) feature negotiation call.

Currently, if the guest selects an interrupt controller different from the
one selected at initial boot, this causes the system to be reset with the
new model and the boot starts again.  This means we run through the SLOF
boot process twice, as well as any other bootloader (e.g. grub) in use
before the OS calls CAS.  This can be confusing and/or inconvenient for
users.

Thanks to two fairly recent changes, we no longer need this reboot.  1) we
now completely regenerate the device tree when CAS is called (meaning we
don't need special case updates for all the device tree changes caused by
the interrupt controller mode change),  2) we now have explicit code paths
to activate and deactivate the different interrupt controllers, rather than
just implicitly calling those at machine reset time.

We can therefore eliminate the reboot for changing irq mode, simply by
putting a call to spapr_irq_update_active_intc() before we call
spapr_h_cas_compose_response() (which gives the updated device tree to
the guest firmware and OS).

Signed-off-by: David Gibson <[email protected]>
Reviewed-by: Cedric Le Goater <[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
5 years agoppc: well form kvmppc_hint_smt_possible error hint helper
Vladimir Sementsov-Ogievskiy [Wed, 27 Nov 2019 19:14:34 +0000 (22:14 +0300)]
ppc: well form kvmppc_hint_smt_possible error hint helper

Make kvmppc_hint_smt_possible hint append helper well formed:
rename errp to errp_in, as it is IN-parameter here (which is unusual
for errp), rename function to be kvmppc_error_append_*_hint.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
Message-Id: <20191127191434[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Dump the XIVE NVT table
Cédric Le Goater [Mon, 25 Nov 2019 06:58:20 +0000 (07:58 +0100)]
ppc/pnv: Dump the XIVE NVT table

This is useful to dump the saved contexts of the vCPUs : configuration
of the base END index of the vCPU and the Interrupt Pending Buffer
register, which is updated when an interrupt can not be presented.

When dumping the NVT table, we skip empty indirect pages which are not
necessarily allocated.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Extend XiveRouter with a get_block_id() handler
Cédric Le Goater [Mon, 25 Nov 2019 06:58:19 +0000 (07:58 +0100)]
ppc/pnv: Extend XiveRouter with a get_block_id() handler

When doing CAM line compares, fetch the block id from the interrupt
controller which can have set the PC_TCTXT_CHIPID field.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Introduce a pnv_xive_block_id() helper
Cédric Le Goater [Mon, 25 Nov 2019 06:58:18 +0000 (07:58 +0100)]
ppc/pnv: Introduce a pnv_xive_block_id() helper

When PC_TCTXT_CHIPID_OVERRIDE is configured, the PC_TCTXT_CHIPID field
overrides the hardwired chip ID in the Powerbus operations and for CAM
compares. This is typically used in the one block-per-chip configuration
to associate a unique block id number to each IC of the system.

Simplify the model with a pnv_xive_block_id() helper and remove
'tctx_chipid' which becomes useless.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/xive: Synthesize interrupt from the saved IPB in the NVT
Cédric Le Goater [Mon, 25 Nov 2019 06:58:17 +0000 (07:58 +0100)]
ppc/xive: Synthesize interrupt from the saved IPB in the NVT

When a vCPU is dispatched on a HW thread, its context is pushed in the
thread registers and it is activated by setting the VO bit in the CAM
line word2. The HW grabs the associated NVT, pulls the IPB bits and
merges them with the IPB of the new context. If interrupts were missed
while the vCPU was not dispatched, these are synthesized in this
sequence.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/xive: Introduce a xive_tctx_ipb_update() helper
Cédric Le Goater [Mon, 25 Nov 2019 06:58:16 +0000 (07:58 +0100)]
ppc/xive: Introduce a xive_tctx_ipb_update() helper

We will use it to resend missed interrupts when a vCPU context is
pushed on a HW thread.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/xive: Remove the get_tctx() XiveRouter handler
Cédric Le Goater [Mon, 25 Nov 2019 06:58:15 +0000 (07:58 +0100)]
ppc/xive: Remove the get_tctx() XiveRouter handler

It is now unused.

Reviewed-by: Greg Kurz <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/xive: Move the TIMA operations to the controller model
Cédric Le Goater [Mon, 25 Nov 2019 06:58:14 +0000 (07:58 +0100)]
ppc/xive: Move the TIMA operations to the controller model

On the P9 Processor, the thread interrupt context registers of a CPU
can be accessed "directly" when by load/store from the CPU or
"indirectly" by the IC through an indirect TIMA page. This requires to
configure first the PC_TCTXT_INDIRx registers.

Today, we rely on the get_tctx() handler to deduce from the CPU PIR
the chip from which the TIMA access is being done. By handling the
TIMA memory ops under the interrupt controller model of each machine,
we can uniformize the TIMA direct and indirect ops under PowerNV. We
can also check that the CPUs have been enabled in the XIVE controller.

This prepares ground for the future versions of XIVE.

Reviewed-by: Greg Kurz <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/pnv: Clarify how the TIMA is accessed on a multichip system
Cédric Le Goater [Mon, 25 Nov 2019 06:58:13 +0000 (07:58 +0100)]
ppc/pnv: Clarify how the TIMA is accessed on a multichip system

The TIMA region gives access to the thread interrupt context registers
of a CPU. It is mapped at the same address on all chips and can be
accessed by any CPU of the system. To identify the chip from which the
access is being done, the PowerBUS uses a 'chip' field in the
load/store messages. QEMU does not model these messages, instead, we
extract the chip id from the CPU PIR and do a lookup at the machine
level to fetch the targeted interrupt controller.

Introduce pnv_get_chip() and pnv_xive_tm_get_xive() helpers to clarify
this process in pnv_xive_get_tctx(). The latter will be removed in the
subsequent patches but the same principle will be kept.

Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agospapr/xive: Configure number of servers in KVM
Greg Kurz [Tue, 26 Nov 2019 16:46:33 +0000 (17:46 +0100)]
spapr/xive: Configure number of servers in KVM

The XIVE KVM devices now has an attribute to configure the number of
interrupt servers. This allows to greatly optimize the usage of the VP
space in the XIVE HW, and thus to start a lot more VMs.

Only set this attribute if available in order to support older POWER9
KVM.

The XIVE KVM device now reports the exhaustion of VPs upon the
connection of the first VCPU. Check that in order to have a chance
to provide a hint to the user.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157478679392.67101.7843580591407950866[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agospapr/xics: Configure number of servers in KVM
Greg Kurz [Tue, 26 Nov 2019 16:46:28 +0000 (17:46 +0100)]
spapr/xics: Configure number of servers in KVM

The XICS-on-XIVE KVM devices now has an attribute to configure the number
of interrupt servers. This allows to greatly optimize the usage of the VP
space in the XIVE HW, and thus to start a lot more VMs.

Only set this attribute if available in order to support older POWER9 KVM
and pre-POWER9 XICS KVM devices.

The XICS-on-XIVE KVM device now reports the exhaustion of VPs upon the
connection of the first VCPU. Check that in order to have a chance to
provide a hint to the user.
`
Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157478678846.67101.9660531022460517710[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agospapr: Pass the maximum number of vCPUs to the KVM interrupt controller
Greg Kurz [Tue, 26 Nov 2019 16:46:23 +0000 (17:46 +0100)]
spapr: Pass the maximum number of vCPUs to the KVM interrupt controller

The XIVE and XICS-on-XIVE KVM devices on POWER9 hosts can greatly reduce
their consumption of some scarce HW resources, namely Virtual Presenter
identifiers, if they know the maximum number of vCPUs that may run in the
VM.

Prepare ground for this by passing the value down to xics_kvm_connect()
and kvmppc_xive_connect(). This is purely mechanical, no functional
change.

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157478678301.67101.2717368060417156338[email protected]>
Reviewed-by: Cédric Le Goater <[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agolinux-headers: Update
Greg Kurz [Tue, 26 Nov 2019 16:46:17 +0000 (17:46 +0100)]
linux-headers: Update

Update to mainline commit be2eca94d144 ("Merge tag 'for-linus-5.5-1'`
of git://github.com/cminyard/linux-ipmi")

Signed-off-by: Greg Kurz <[email protected]>
Message-Id: <157478677756.67101.11558821804418331832[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/xive: Extend the TIMA operation with a XivePresenter parameter
Cédric Le Goater [Mon, 25 Nov 2019 06:58:12 +0000 (07:58 +0100)]
ppc/xive: Extend the TIMA operation with a XivePresenter parameter

The TIMA operations are performed on behalf of the XIVE IVPE sub-engine
(Presenter) on the thread interrupt context registers. The current
operations supported by the model are simple and do not require access
to the controller but more complex operations will need access to the
controller NVT table and to its configuration.

Reviewed-by: Greg Kurz <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/xive: Use the XiveFabric and XivePresenter interfaces
Cédric Le Goater [Mon, 25 Nov 2019 06:58:11 +0000 (07:58 +0100)]
ppc/xive: Use the XiveFabric and XivePresenter interfaces

Now that the machines have handlers implementing the XiveFabric and
XivePresenter interfaces, remove xive_presenter_match() and make use
of the 'match_nvt' handler of the machine.

Reviewed-by: Greg Kurz <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
5 years agoppc/spapr: Implement the XiveFabric interface
Cédric Le Goater [Mon, 25 Nov 2019 06:58:10 +0000 (07:58 +0100)]
ppc/spapr: Implement the XiveFabric interface

The CAM line matching sequence in the pseries machine does not change
much apart from the use of the new QOM interfaces. There is an extra
indirection because of the sPAPR IRQ backend of the machine. Only the
XIVE backend implements the new 'match_nvt' handler.

Reviewed-by: Greg Kurz <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
Message-Id: <20191125065820[email protected]>
Signed-off-by: David Gibson <[email protected]>
This page took 0.117834 seconds and 4 git commands to generate.