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 | 1377 | if (!xen_initial_domain()) { |
| 1378 | 1378 | add_preferred_console("xenboot", 0, NULL); |
| 1379 | − add_preferred_console("tty", 0, NULL); | |
| 1380 | − add_preferred_console("hvc", 0, NULL); | |
| 1381 | 1379 | if (pci_xen) |
| 1382 | 1380 | x86_init.pci.arch_init = pci_xen_init; |
| 1383 | 1381 | } else { |
| @@ -1410,6 +1408,10 @@ asmlinkage __visible void __init xen_start_kernel(void) · 26 unmodified lines | ||
| 1410 | 1408 | |
| 1411 | 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 | 1415 | #ifdef CONFIG_PCI |
| 1414 | 1416 | /* PCI BIOS service won't work from a PV guest. */ |
| 1415 | 1417 | pci_probe &= ~PCI_PROBE_BIOS; |
| @@ -2005,7 +2005,10 @@ static void netback_changed(struct xenbus_device *dev, · 2004 unmodified lines | ||
| 2005 | 2005 | case XenbusStateInitialised: |
| 2006 | 2006 | case XenbusStateReconfiguring: |
| 2007 | 2007 | case XenbusStateReconfigured: |
| 2008 | + break; | |
| 2009 | + | |
| 2008 | 2010 | case XenbusStateUnknown: |
| 2011 | + wake_up_all(&module_unload_q); | |
| 2009 | 2012 | break; |
| 2010 | 2013 | |
| 2011 | 2014 | case XenbusStateInitWait: |
| @@ -2136,7 +2139,9 @@ static int xennet_remove(struct xenbus_device *dev) · 124 unmodified lines | ||
| 2136 | 2139 | xenbus_switch_state(dev, XenbusStateClosing); |
| 2137 | 2140 | wait_event(module_unload_q, |
| 2138 | 2141 | xenbus_read_driver_state(dev->otherend) == |
| 2139 | − XenbusStateClosing); | |
| 2142 | + XenbusStateClosing || | |
| 2143 | + xenbus_read_driver_state(dev->otherend) == | |
| 2144 | + XenbusStateUnknown); | |
| 2140 | 2145 | |
| 2141 | 2146 | xenbus_switch_state(dev, XenbusStateClosed); |
| 2142 | 2147 | wait_event(module_unload_q, |
| @@ -755,8 +755,8 @@ out: · 754 unmodified lines | ||
| 755 | 755 | mutex_unlock(&irq_mapping_update_lock); |
| 756 | 756 | return irq; |
| 757 | 757 | error_irq: |
| 758 | − for (; i >= 0; i--) | |
| 759 | − __unbind_from_irq(irq + i); | |
| 758 | + while (nvec--) | |
| 759 | + __unbind_from_irq(irq + nvec); | |
| 760 | 760 | mutex_unlock(&irq_mapping_update_lock); |
| 761 | 761 | return ret; |
| 762 | 762 | } |
| @@ -416,7 +416,7 @@ static int pvcalls_back_connect(struct xenbus_device *dev, · 415 unmodified lines | ||
| 416 | 416 | sock); |
| 417 | 417 | if (!map) { |
| 418 | 418 | ret = -EFAULT; |
| 419 | − sock_release(map->sock); | |
| 419 | + sock_release(sock); | |
| 420 | 420 | } |
| 421 | 421 | |
| 422 | 422 | out: |
| @@ -73,20 +73,25 @@ struct sock_mapping { · 72 unmodified lines | ||
| 73 | 73 | wait_queue_head_t inflight_conn_req; |
| 74 | 74 | } active; |
| 75 | 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 | 80 | #define PVCALLS_STATUS_UNINITALIZED 0 |
| 78 | 81 | #define PVCALLS_STATUS_BIND 1 |
| 79 | 82 | #define PVCALLS_STATUS_LISTEN 2 |
| 80 | − uint8_t status; | |
| 83 | + uint8_t status __attribute__((aligned(8))); | |
| 81 | 84 | /* |
| 82 | 85 | * Internal state-machine flags. |
| 83 | 86 | * Only one accept operation can be inflight for a socket. |
| 84 | 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 | 91 | #define PVCALLS_FLAG_ACCEPT_INFLIGHT 0 |
| 87 | 92 | #define PVCALLS_FLAG_POLL_INFLIGHT 1 |
| 88 | 93 | #define PVCALLS_FLAG_POLL_RET 2 |
| 89 | − uint8_t flags; | |
| 94 | + uint8_t flags __attribute__((aligned(8))); | |
| 90 | 95 | uint32_t inflight_req_id; |
| 91 | 96 | struct sock_mapping *accept_map; |
| 92 | 97 | wait_queue_head_t inflight_accept_req; |