Pull xen fixes from Juergen Gross: "Five minor fixes for Xen-specific drivers" * tag 'for-linus-4.16a-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: pvcalls-front: 64-bit align flags x86/xen: add tty0 and hvc0 as preferred consoles for dom0 xen-netfront: Fix hang on device removal xen/pirq: fix error path cleanup when binding MSIs xen/pvcalls: fix null pointer dereference on map->sock
Unified · Split
| @@ -1376,8 +1376,6 @@ asmlinkage __visible void __init xen_start_kernel(void) · 1375 unmodified lines | |||
| 1376 | 1376 | ||
| 1377 | if (!xen_initial_domain()) { | 1377 | if (!xen_initial_domain()) { |
| 1378 | add_preferred_console("xenboot", 0, NULL); | 1378 | add_preferred_console("xenboot", 0, NULL); |
| 1379 | add_preferred_console("tty", 0, NULL); | ||
| 1380 | add_preferred_console("hvc", 0, NULL); | ||
| 1381 | if (pci_xen) | 1379 | if (pci_xen) |
| 1382 | x86_init.pci.arch_init = pci_xen_init; | 1380 | x86_init.pci.arch_init = pci_xen_init; |
| 1383 | } else { | 1381 | } else { |
| @@ -1410,6 +1408,10 @@ asmlinkage __visible void __init xen_start_kernel(void) · 26 unmodified lines | |||
| 1410 | 1408 | ||
| 1411 | xen_boot_params_init_edd(); | 1409 | xen_boot_params_init_edd(); |
| 1412 | } | 1410 | } |
| 1411 | |||
| 1412 | add_preferred_console("tty", 0, NULL); | ||
| 1413 | add_preferred_console("hvc", 0, NULL); | ||
| 1414 | |||
| 1413 | #ifdef CONFIG_PCI | 1415 | #ifdef CONFIG_PCI |
| 1414 | /* PCI BIOS service won't work from a PV guest. */ | 1416 | /* PCI BIOS service won't work from a PV guest. */ |
| 1415 | pci_probe &= ~PCI_PROBE_BIOS; | 1417 | pci_probe &= ~PCI_PROBE_BIOS; |
| @@ -2005,7 +2005,10 @@ static void netback_changed(struct xenbus_device *dev, · 2004 unmodified lines | |||
| 2005 | case XenbusStateInitialised: | 2005 | case XenbusStateInitialised: |
| 2006 | case XenbusStateReconfiguring: | 2006 | case XenbusStateReconfiguring: |
| 2007 | case XenbusStateReconfigured: | 2007 | case XenbusStateReconfigured: |
| 2008 | break; | ||
| 2009 | |||
| 2008 | case XenbusStateUnknown: | 2010 | case XenbusStateUnknown: |
| 2011 | wake_up_all(&module_unload_q); | ||
| 2009 | break; | 2012 | break; |
| 2010 | 2013 | ||
| 2011 | case XenbusStateInitWait: | 2014 | case XenbusStateInitWait: |
| @@ -2136,7 +2139,9 @@ static int xennet_remove(struct xenbus_device *dev) · 124 unmodified lines | |||
| 2136 | xenbus_switch_state(dev, XenbusStateClosing); | 2139 | xenbus_switch_state(dev, XenbusStateClosing); |
| 2137 | wait_event(module_unload_q, | 2140 | wait_event(module_unload_q, |
| 2138 | xenbus_read_driver_state(dev->otherend) == | 2141 | xenbus_read_driver_state(dev->otherend) == |
| 2139 | XenbusStateClosing); | 2142 | XenbusStateClosing || |
| 2143 | xenbus_read_driver_state(dev->otherend) == | ||
| 2144 | XenbusStateUnknown); | ||
| 2140 | 2145 | ||
| 2141 | xenbus_switch_state(dev, XenbusStateClosed); | 2146 | xenbus_switch_state(dev, XenbusStateClosed); |
| 2142 | wait_event(module_unload_q, | 2147 | wait_event(module_unload_q, |
| @@ -755,8 +755,8 @@ out: · 754 unmodified lines | |||
| 755 | mutex_unlock(&irq_mapping_update_lock); | 755 | mutex_unlock(&irq_mapping_update_lock); |
| 756 | return irq; | 756 | return irq; |
| 757 | error_irq: | 757 | error_irq: |
| 758 | for (; i >= 0; i--) | 758 | while (nvec--) |
| 759 | __unbind_from_irq(irq + i); | 759 | __unbind_from_irq(irq + nvec); |
| 760 | mutex_unlock(&irq_mapping_update_lock); | 760 | mutex_unlock(&irq_mapping_update_lock); |
| 761 | return ret; | 761 | return ret; |
| 762 | } | 762 | } |
| @@ -416,7 +416,7 @@ static int pvcalls_back_connect(struct xenbus_device *dev, · 415 unmodified lines | |||
| 416 | sock); | 416 | sock); |
| 417 | if (!map) { | 417 | if (!map) { |
| 418 | ret = -EFAULT; | 418 | ret = -EFAULT; |
| 419 | sock_release(map->sock); | 419 | sock_release(sock); |
| 420 | } | 420 | } |
| 421 | 421 | ||
| 422 | out: | 422 | out: |
| @@ -73,20 +73,25 @@ struct sock_mapping { · 72 unmodified lines | |||
| 73 | wait_queue_head_t inflight_conn_req; | 73 | wait_queue_head_t inflight_conn_req; |
| 74 | } active; | 74 | } active; |
| 75 | struct { | 75 | struct { |
| 76 | /* Socket status */ | 76 | /* |
| 77 | * Socket status, needs to be 64-bit aligned due to the | ||
| 78 | * test_and_* functions which have this requirement on arm64. | ||
| 79 | */ | ||
| 77 | #define PVCALLS_STATUS_UNINITALIZED 0 | 80 | #define PVCALLS_STATUS_UNINITALIZED 0 |
| 78 | #define PVCALLS_STATUS_BIND 1 | 81 | #define PVCALLS_STATUS_BIND 1 |
| 79 | #define PVCALLS_STATUS_LISTEN 2 | 82 | #define PVCALLS_STATUS_LISTEN 2 |
| 80 | uint8_t status; | 83 | uint8_t status __attribute__((aligned(8))); |
| 81 | /* | 84 | /* |
| 82 | * Internal state-machine flags. | 85 | * Internal state-machine flags. |
| 83 | * Only one accept operation can be inflight for a socket. | 86 | * Only one accept operation can be inflight for a socket. |
| 84 | * Only one poll operation can be inflight for a given socket. | 87 | * Only one poll operation can be inflight for a given socket. |
| 88 | * flags needs to be 64-bit aligned due to the test_and_* | ||
| 89 | * functions which have this requirement on arm64. | ||
| 85 | */ | 90 | */ |
| 86 | #define PVCALLS_FLAG_ACCEPT_INFLIGHT 0 | 91 | #define PVCALLS_FLAG_ACCEPT_INFLIGHT 0 |
| 87 | #define PVCALLS_FLAG_POLL_INFLIGHT 1 | 92 | #define PVCALLS_FLAG_POLL_INFLIGHT 1 |
| 88 | #define PVCALLS_FLAG_POLL_RET 2 | 93 | #define PVCALLS_FLAG_POLL_RET 2 |
| 89 | uint8_t flags; | 94 | uint8_t flags __attribute__((aligned(8))); |
| 90 | uint32_t inflight_req_id; | 95 | uint32_t inflight_req_id; |
| 91 | struct sock_mapping *accept_map; | 96 | struct sock_mapping *accept_map; |
| 92 | wait_queue_head_t inflight_accept_req; | 97 | wait_queue_head_t inflight_accept_req; |