From nobody Wed Dec 17 13:36:27 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1F7EC6FD18 for ; Wed, 19 Apr 2023 17:55:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233127AbjDSRzS (ORCPT ); Wed, 19 Apr 2023 13:55:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51836 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230346AbjDSRzR (ORCPT ); Wed, 19 Apr 2023 13:55:17 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0BA594ECB for ; Wed, 19 Apr 2023 10:55:16 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id d10-20020a25cd0a000000b00b956d4a5a04so183533ybf.22 for ; Wed, 19 Apr 2023 10:55:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1681926915; x=1684518915; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=hfKbsTvYMuDBJ3f8L2RgBa2t3+n8sbG5Rzd4mp8z1KE=; b=0pVIsViMHhkGqQpcek7+vhQ9W+oXFYe2LJRj96FsB7BgMi5SHS8QW+hLSYNgTqPtxn JqAsWl3L5h4nCg4EsUZXeKVPpMirFYNYyvmtzfqPP/ExjsfGXKM9nW1XUOTSAMzEOk8t OS07Yr4msyQd4vett/5WwJ/HRb/IN6AqQKI53ZJpfpOzYe1aJ3x+3vOOchmscpaJA7YA mDrn0KgKwCfHiunTE3uSxpmLMGMLZ1nuzM38wmnvF8u1BXlcWpRyG7aRALIShGn5RUWx CISnbxXrKjnph1jESJ6/0zWPu8yafJ5p+coupXok/+zO06hgDI2Ys5G1i52+zf6nuXX6 1c0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681926915; x=1684518915; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=hfKbsTvYMuDBJ3f8L2RgBa2t3+n8sbG5Rzd4mp8z1KE=; b=ChjaE87DJR7RdSv0Pbosu+HADov8hOp4VXMJdxUrcCUrb/AWa3P+6BjZGhjsEUs39B 8aVRbxa4mBK7uLPA4XWWDulWON1udhTYuRO34jzXBQGFJl2YGieHgE9sANl5GhQZ1GeX d1NvsVkatZfbAYWnO/hQVdQAD97XbZPfCdDhRPmJYzuhdEuIVG/kikaXNZc6zwlDWhOV QC30CQoIIrwNXNfUzK3uRRxFBsxEnJJwY2iAej6cYcwuIhawmTmf3pCENBvkVzUF4x6C 44x8Vc2lIsxxJvFOD/3kNkgSE3JUcYI2L1eg4fGP+hl/r0+PWkzSwXpCbSLAq1O8XiOT A/mQ== X-Gm-Message-State: AAQBX9colqxV6MZAhn7qa/lM7L/y/Xrb8jA1wjPuEj/9zkNrJJ3Pq80X O6ctPRTR3bHJksMQvgNWV6YwJauAnfe4iw== X-Google-Smtp-Source: AKy350ZnW4FMeGR7MYtF5Mj6A5GrZFl9LH1s+yJ9nRosIkTgHK6BQTU8w1BwI09rAqNvtLTH2oaG5zjMKLs9LQ== X-Received: from pranav-first.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:390b]) (user=pranavpp job=sendgmr) by 2002:a25:d0d2:0:b0:b92:5a75:9f55 with SMTP id h201-20020a25d0d2000000b00b925a759f55mr377324ybg.1.1681926915241; Wed, 19 Apr 2023 10:55:15 -0700 (PDT) Date: Wed, 19 Apr 2023 17:55:02 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.40.0.634.g4ca3ef3211-goog Message-ID: <20230419175502.919999-1-pranavpp@google.com> Subject: [PATCH] scsi: pm80xx: Add GET_NVMD timeout during probe From: Pranav Prasad To: Jack Wang , "James E . J . Bottomley" , "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Changyuan Lyu , Pranav Prasad Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Changyuan Lyu Added a wait timeout to prevent the kernel from waiting for the=20 GET_NVMD response forever during probe. Added a check for the controller state before issuing GET_NVMD request. Signed-off-by: Changyuan Lyu Signed-off-by: Pranav Prasad --- drivers/scsi/pm8001/pm8001_init.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001= _init.c index 7e589fe3e010..5ca20ccdce34 100644 --- a/drivers/scsi/pm8001/pm8001_init.c +++ b/drivers/scsi/pm8001/pm8001_init.c @@ -666,7 +666,7 @@ static void pm8001_post_sas_ha_init(struct Scsi_Host *= shost, * Currently we just set the fixed SAS address to our HBA, for manufacture, * it should read from the EEPROM */ -static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) +static int pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) { u8 i, j; u8 sas_add[8]; @@ -679,6 +679,12 @@ static void pm8001_init_sas_add(struct pm8001_hba_info= *pm8001_ha) struct pm8001_ioctl_payload payload; u16 deviceid; int rc; + unsigned long time_remaining; + + if (PM8001_CHIP_DISP->fatal_errors(pm8001_ha)) { + pm8001_dbg(pm8001_ha, FAIL, "controller is in fatal error state\n"); + return -EIO; + } =20 pci_read_config_word(pm8001_ha->pdev, PCI_DEVICE_ID, &deviceid); pm8001_ha->nvmd_completion =3D &completion; @@ -703,16 +709,23 @@ static void pm8001_init_sas_add(struct pm8001_hba_inf= o *pm8001_ha) payload.offset =3D 0; payload.func_specific =3D kzalloc(payload.rd_length, GFP_KERNEL); if (!payload.func_specific) { - pm8001_dbg(pm8001_ha, INIT, "mem alloc fail\n"); - return; + pm8001_dbg(pm8001_ha, FAIL, "mem alloc fail\n"); + return -ENOMEM; } rc =3D PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); if (rc) { kfree(payload.func_specific); - pm8001_dbg(pm8001_ha, INIT, "nvmd failed\n"); - return; + pm8001_dbg(pm8001_ha, FAIL, "nvmd failed\n"); + return -EIO; + } + time_remaining =3D wait_for_completion_timeout(&completion, + msecs_to_jiffies(60*1000)); // 1 min + if (!time_remaining) { + kfree(payload.func_specific); + pm8001_dbg(pm8001_ha, FAIL, "get_nvmd_req timeout\n"); + return -EIO; } - wait_for_completion(&completion); + =20 for (i =3D 0, j =3D 0; i <=3D 7; i++, j++) { if (pm8001_ha->chip_id =3D=3D chip_8001) { @@ -751,6 +764,7 @@ static void pm8001_init_sas_add(struct pm8001_hba_info = *pm8001_ha) memcpy(pm8001_ha->sas_addr, &pm8001_ha->phy[0].dev_sas_addr, SAS_ADDR_SIZE); #endif + return 0; } =20 /* @@ -1166,7 +1180,8 @@ static int pm8001_pci_probe(struct pci_dev *pdev, pm80xx_set_thermal_config(pm8001_ha); } =20 - pm8001_init_sas_add(pm8001_ha); + if (pm8001_init_sas_add(pm8001_ha)) + goto err_out_shost; /* phy setting support for motherboard controller */ rc =3D pm8001_configure_phy_settings(pm8001_ha); if (rc) --=20 2.40.0.634.g4ca3ef3211-goog