| From b43e0d6819e7723e5b43da02b039eb6d62970f1f Mon Sep 17 00:00:00 2001 |
| From: Andrey Smetanin <asmetanin@virtuozzo.com> |
| Date: Mon, 14 Dec 2015 16:01:38 -0800 |
| Subject: [PATCH 038/135] drivers/hv: cleanup synic msrs if vmbus connect |
| failed |
| |
| [ Upstream commit 17efbee8ba02ef00d3b270998978f8a1a90f1d92 ] |
| |
| Before vmbus_connect() synic is setup per vcpu - this means |
| hypervisor receives writes at synic msr's and probably allocate |
| hypervisor resources per synic setup. |
| |
| If vmbus_connect() failed for some reason it's neccessary to cleanup |
| synic setup by call hv_synic_cleanup() at each vcpu to get a chance |
| to free allocated resources by hypervisor per synic. |
| |
| This patch does appropriate cleanup in case of vmbus_connect() failure. |
| |
| Signed-off-by: Andrey Smetanin <asmetanin@virtuozzo.com> |
| Signed-off-by: Denis V. Lunev <den@openvz.org> |
| Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com> |
| CC: "K. Y. Srinivasan" <kys@microsoft.com> |
| CC: Haiyang Zhang <haiyangz@microsoft.com> |
| CC: Vitaly Kuznetsov <vkuznets@redhat.com> |
| Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <alexander.levin@verizon.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/hv/vmbus_drv.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/hv/vmbus_drv.c |
| +++ b/drivers/hv/vmbus_drv.c |
| @@ -870,7 +870,7 @@ static int vmbus_bus_init(int irq) |
| on_each_cpu(hv_synic_init, NULL, 1); |
| ret = vmbus_connect(); |
| if (ret) |
| - goto err_alloc; |
| + goto err_connect; |
| |
| if (vmbus_proto_version > VERSION_WIN7) |
| cpu_hotplug_disable(); |
| @@ -888,6 +888,8 @@ static int vmbus_bus_init(int irq) |
| |
| return 0; |
| |
| +err_connect: |
| + on_each_cpu(hv_synic_cleanup, NULL, 1); |
| err_alloc: |
| hv_synic_free(); |
| hv_remove_vmbus_irq(); |