mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
xen: features and fixes for 4.8-rc0
- ACPI support for guests on ARM platforms.
- Generic steal time support for arm and x86.
- Support cases where kernel cpu is not Xen VCPU number (e.g., if
in-guest kexec is used).
- Use the system workqueue instead of a custom workqueue in various
places.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJXmLlrAAoJEFxbo/MsZsTRvRQH/1wOMF8BmlbZfR7H3qwDfjst
ApNifCiZE08xDtWBlwUaBFAQxyflQS9BBiNZDVK0sysIdXeOdpWV7V0ZjRoLL+xr
czsaaGXDcmXxJxApoMDVuT7FeP6rEk6LVAYRoHpVjJjMZGW3BbX1vZaMW4DXl2WM
9YNaF2Lj+rpc1f8iG31nUxwkpmcXFog6ct4tu7HiyCFT3hDkHt/a4ghuBdQItCkd
vqBa1pTpcGtQBhSmWzlylN/PV2+NKcRd+kGiwd09/O/rNzogTMCTTWeHKAtMpPYb
Cu6oSqJtlK5o0vtr0qyLSWEGIoyjE2gE92s0wN3iCzFY1PldqdsxUO622nIj+6o=
=G6q3
-----END PGP SIGNATURE-----
Merge tag 'for-linus-4.8-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip
Pull xen updates from David Vrabel:
"Features and fixes for 4.8-rc0:
- ACPI support for guests on ARM platforms.
- Generic steal time support for arm and x86.
- Support cases where kernel cpu is not Xen VCPU number (e.g., if
in-guest kexec is used).
- Use the system workqueue instead of a custom workqueue in various
places"
* tag 'for-linus-4.8-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: (47 commits)
xen: add static initialization of steal_clock op to xen_time_ops
xen/pvhvm: run xen_vcpu_setup() for the boot CPU
xen/evtchn: use xen_vcpu_id mapping
xen/events: fifo: use xen_vcpu_id mapping
xen/events: use xen_vcpu_id mapping in events_base
x86/xen: use xen_vcpu_id mapping when pointing vcpu_info to shared_info
x86/xen: use xen_vcpu_id mapping for HYPERVISOR_vcpu_op
xen: introduce xen_vcpu_id mapping
x86/acpi: store ACPI ids from MADT for future usage
x86/xen: update cpuid.h from Xen-4.7
xen/evtchn: add IOCTL_EVTCHN_RESTRICT
xen-blkback: really don't leak mode property
xen-blkback: constify instance of "struct attribute_group"
xen-blkfront: prefer xenbus_scanf() over xenbus_gather()
xen-blkback: prefer xenbus_scanf() over xenbus_gather()
xen: support runqueue steal time on xen
arm/xen: add support for vm_assist hypercall
xen: update xen headers
xen-pciback: drop superfluous variables
xen-pciback: short-circuit read path used for merging write values
...
This commit is contained in:
commit
08fd8c1768
59 changed files with 1150 additions and 493 deletions
|
|
@ -46,6 +46,13 @@ DEFINE_MUTEX(acpi_device_lock);
|
|||
LIST_HEAD(acpi_wakeup_device_list);
|
||||
static DEFINE_MUTEX(acpi_hp_context_lock);
|
||||
|
||||
/*
|
||||
* The UART device described by the SPCR table is the only object which needs
|
||||
* special-casing. Everything else is covered by ACPI namespace paths in STAO
|
||||
* table.
|
||||
*/
|
||||
static u64 spcr_uart_addr;
|
||||
|
||||
struct acpi_dep_data {
|
||||
struct list_head node;
|
||||
acpi_handle master;
|
||||
|
|
@ -1458,6 +1465,41 @@ static int acpi_add_single_object(struct acpi_device **child,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static acpi_status acpi_get_resource_memory(struct acpi_resource *ares,
|
||||
void *context)
|
||||
{
|
||||
struct resource *res = context;
|
||||
|
||||
if (acpi_dev_resource_memory(ares, res))
|
||||
return AE_CTRL_TERMINATE;
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
static bool acpi_device_should_be_hidden(acpi_handle handle)
|
||||
{
|
||||
acpi_status status;
|
||||
struct resource res;
|
||||
|
||||
/* Check if it should ignore the UART device */
|
||||
if (!(spcr_uart_addr && acpi_has_method(handle, METHOD_NAME__CRS)))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* The UART device described in SPCR table is assumed to have only one
|
||||
* memory resource present. So we only look for the first one here.
|
||||
*/
|
||||
status = acpi_walk_resources(handle, METHOD_NAME__CRS,
|
||||
acpi_get_resource_memory, &res);
|
||||
if (ACPI_FAILURE(status) || res.start != spcr_uart_addr)
|
||||
return false;
|
||||
|
||||
acpi_handle_info(handle, "The UART device @%pa in SPCR table will be hidden\n",
|
||||
&res.start);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static int acpi_bus_type_and_status(acpi_handle handle, int *type,
|
||||
unsigned long long *sta)
|
||||
{
|
||||
|
|
@ -1471,6 +1513,9 @@ static int acpi_bus_type_and_status(acpi_handle handle, int *type,
|
|||
switch (acpi_type) {
|
||||
case ACPI_TYPE_ANY: /* for ACPI_ROOT_OBJECT */
|
||||
case ACPI_TYPE_DEVICE:
|
||||
if (acpi_device_should_be_hidden(handle))
|
||||
return -ENODEV;
|
||||
|
||||
*type = ACPI_BUS_TYPE_DEVICE;
|
||||
status = acpi_bus_get_status_handle(handle, sta);
|
||||
if (ACPI_FAILURE(status))
|
||||
|
|
@ -1925,11 +1970,26 @@ static int acpi_bus_scan_fixed(void)
|
|||
return result < 0 ? result : 0;
|
||||
}
|
||||
|
||||
static void __init acpi_get_spcr_uart_addr(void)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpi_table_spcr *spcr_ptr;
|
||||
|
||||
status = acpi_get_table(ACPI_SIG_SPCR, 0,
|
||||
(struct acpi_table_header **)&spcr_ptr);
|
||||
if (ACPI_SUCCESS(status))
|
||||
spcr_uart_addr = spcr_ptr->serial_port.address;
|
||||
else
|
||||
printk(KERN_WARNING PREFIX "STAO table present, but SPCR is missing\n");
|
||||
}
|
||||
|
||||
static bool acpi_scan_initialized;
|
||||
|
||||
int __init acpi_scan_init(void)
|
||||
{
|
||||
int result;
|
||||
acpi_status status;
|
||||
struct acpi_table_stao *stao_ptr;
|
||||
|
||||
acpi_pci_root_init();
|
||||
acpi_pci_link_init();
|
||||
|
|
@ -1945,6 +2005,20 @@ int __init acpi_scan_init(void)
|
|||
|
||||
acpi_scan_add_handler(&generic_device_handler);
|
||||
|
||||
/*
|
||||
* If there is STAO table, check whether it needs to ignore the UART
|
||||
* device in SPCR table.
|
||||
*/
|
||||
status = acpi_get_table(ACPI_SIG_STAO, 0,
|
||||
(struct acpi_table_header **)&stao_ptr);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
if (stao_ptr->header.length > sizeof(struct acpi_table_stao))
|
||||
printk(KERN_INFO PREFIX "STAO Name List not yet supported.");
|
||||
|
||||
if (stao_ptr->ignore_uart)
|
||||
acpi_get_spcr_uart_addr();
|
||||
}
|
||||
|
||||
mutex_lock(&acpi_scan_lock);
|
||||
/*
|
||||
* Enumerate devices in the ACPI namespace.
|
||||
|
|
|
|||
Loading…
Reference in a new issue