Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4724756pxj; Wed, 12 May 2021 11:46:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzVcJV4CbysJ2HPoMjzn24PV2fyADXz/FRGHIv2QLzxLH5LfgbbRqhtNlvOfV2+O8YVRZLQ X-Received: by 2002:a17:907:77d1:: with SMTP id kz17mr2788583ejc.353.1620845209139; Wed, 12 May 2021 11:46:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620845209; cv=none; d=google.com; s=arc-20160816; b=rRym1yZVRKs+kAiZfn2npMfjlmm0OnQPjCwoTlqi7Le9CPzt5d+2rjyU3xMdUAD31D HqS5wBH8VidbD7y2THOycAsQfs3lFiDVJnnIWtw6Z/3RX2TJDUA1AOpCF+k6W1isKrl+ IZOh2fQRutq0rdB70L6YGGQwDn0XBJSEVVZ83EmOT6/RizmHL621PDXIi6vPJHk2OFFS Q7f2WvU3bIlxocDbT8PORoWR/ioQ7Mtwo95RKM/1CRaeHC34nrNUivQHI+3wtUhxOsRE Fjq6iC5L3ggRFIfCZdYKZjsbJ0M0x7Q52kOy3BjGPRw9Dp/sM697/CgmoJkh6t009KDD E6GA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=YpvfW723AxV5LvsxebhJzvrWq63290bZ/oatRVuY6UM=; b=TxfyfkV1SHLh/2UKHxXOr1uFvOqCHlpuzl3tMFGdFWwJ2Rufh4mpmgfsBSYXxR434v s2vxXC1UxEzgCy7yJ0U1ct/i3XpdXUB2tkYiQDN2E5h0PqOw05Pf4U8/mJ4Yw9BzVHQk mBdxlW0D8wic8612uI2RP7KlkIBBQ/Gy0T6q2i2vsWvi3rUecyBg49zHCnlbXjKaRafq pdrw7/qQFZ21Y5OONqhmlzu9oBln8s1TmZ12o5xf7gwkCKAyjwx6PzPNPka761Ai2CPl oqOxJsj1gDWk2JPoOhe41xDhkprcLjXpT4doK0gAyZ3uJndRQEtFZnM7MBQFUIuSt7nB 40Dg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=x8oEk8Gj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 2si190971edv.313.2021.05.12.11.46.24; Wed, 12 May 2021 11:46:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=x8oEk8Gj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357711AbhELSjI (ORCPT + 99 others); Wed, 12 May 2021 14:39:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:57124 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239461AbhELQjP (ORCPT ); Wed, 12 May 2021 12:39:15 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 83A5D61E33; Wed, 12 May 2021 16:03:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620835408; bh=n3kNrpRcBCTol+mm8u6v57hADinBtpPqvGdWRR+C3jM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=x8oEk8GjCUI48K8c/DZAGKqEpvHkdQD0IF5y3STMMEG4RTrL6fnm92RF2ozKSHs1R zte2g1jtIrynruMkSwmz9f7vi6mlzHOODlSiJVHsRQyiBXawy4VmTQ9GRbh922L0Hg moaFoIByS6PzQEeSNS3PAHTOE+82X+rYNAMDw2Jo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Michael Kelley , Vitaly Kuznetsov , Wei Liu , Sasha Levin Subject: [PATCH 5.12 331/677] Drivers: hv: vmbus: Increase wait time for VMbus unload Date: Wed, 12 May 2021 16:46:17 +0200 Message-Id: <20210512144848.263810504@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144837.204217980@linuxfoundation.org> References: <20210512144837.204217980@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Michael Kelley [ Upstream commit 77db0ec8b7764cb9b09b78066ebfd47b2c0c1909 ] When running in Azure, disks may be connected to a Linux VM with read/write caching enabled. If a VM panics and issues a VMbus UNLOAD request to Hyper-V, the response is delayed until all dirty data in the disk cache is flushed. In extreme cases, this flushing can take 10's of seconds, depending on the disk speed and the amount of dirty data. If kdump is configured for the VM, the current 10 second timeout in vmbus_wait_for_unload() may be exceeded, and the UNLOAD complete message may arrive well after the kdump kernel is already running, causing problems. Note that no problem occurs if kdump is not enabled because Hyper-V waits for the cache flush before doing a reboot through the BIOS/UEFI code. Fix this problem by increasing the timeout in vmbus_wait_for_unload() to 100 seconds. Also output periodic messages so that if anyone is watching the serial console, they won't think the VM is completely hung. Fixes: 911e1987efc8 ("Drivers: hv: vmbus: Add timeout to vmbus_wait_for_unload") Signed-off-by: Michael Kelley Reviewed-by: Vitaly Kuznetsov Link: https://lore.kernel.org/r/1618894089-126662-1-git-send-email-mikelley@microsoft.com Signed-off-by: Wei Liu Signed-off-by: Sasha Levin --- drivers/hv/channel_mgmt.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index f0ed730e2e4e..ecebf1235fd5 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -756,6 +756,12 @@ static void init_vp_index(struct vmbus_channel *channel) free_cpumask_var(available_mask); } +#define UNLOAD_DELAY_UNIT_MS 10 /* 10 milliseconds */ +#define UNLOAD_WAIT_MS (100*1000) /* 100 seconds */ +#define UNLOAD_WAIT_LOOPS (UNLOAD_WAIT_MS/UNLOAD_DELAY_UNIT_MS) +#define UNLOAD_MSG_MS (5*1000) /* Every 5 seconds */ +#define UNLOAD_MSG_LOOPS (UNLOAD_MSG_MS/UNLOAD_DELAY_UNIT_MS) + static void vmbus_wait_for_unload(void) { int cpu; @@ -773,12 +779,17 @@ static void vmbus_wait_for_unload(void) * vmbus_connection.unload_event. If not, the last thing we can do is * read message pages for all CPUs directly. * - * Wait no more than 10 seconds so that the panic path can't get - * hung forever in case the response message isn't seen. + * Wait up to 100 seconds since an Azure host must writeback any dirty + * data in its disk cache before the VMbus UNLOAD request will + * complete. This flushing has been empirically observed to take up + * to 50 seconds in cases with a lot of dirty data, so allow additional + * leeway and for inaccuracies in mdelay(). But eventually time out so + * that the panic path can't get hung forever in case the response + * message isn't seen. */ - for (i = 0; i < 1000; i++) { + for (i = 1; i <= UNLOAD_WAIT_LOOPS; i++) { if (completion_done(&vmbus_connection.unload_event)) - break; + goto completed; for_each_online_cpu(cpu) { struct hv_per_cpu_context *hv_cpu @@ -801,9 +812,18 @@ static void vmbus_wait_for_unload(void) vmbus_signal_eom(msg, message_type); } - mdelay(10); + /* + * Give a notice periodically so someone watching the + * serial output won't think it is completely hung. + */ + if (!(i % UNLOAD_MSG_LOOPS)) + pr_notice("Waiting for VMBus UNLOAD to complete\n"); + + mdelay(UNLOAD_DELAY_UNIT_MS); } + pr_err("Continuing even though VMBus UNLOAD did not complete\n"); +completed: /* * We're crashing and already got the UNLOAD_RESPONSE, cleanup all * maybe-pending messages on all CPUs to be able to receive new -- 2.30.2