RE: [EXTERNAL] [PATCH 3/9] qed: avoid truncating work queue length

From: Subbaraya Sundeep Bhatta
Date: Wed Mar 27 2024 - 10:57:47 EST


Hi,

>-----Original Message-----
>From: Arnd Bergmann <arnd@xxxxxxxxxx>
>Sent: Wednesday, March 27, 2024 4:08 AM
>To: llvm@xxxxxxxxxxxxxxx; Ariel Elior <aelior@xxxxxxxxxxx>; Manish Chopra
><manishc@xxxxxxxxxxx>
>Cc: Arnd Bergmann <arnd@xxxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>;
>Eric Dumazet <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo
>Abeni <pabeni@xxxxxxxxxx>; Nathan Chancellor <nathan@xxxxxxxxxx>; Nick
>Desaulniers <ndesaulniers@xxxxxxxxxx>; Bill Wendling <morbo@xxxxxxxxxx>;
>Justin Stitt <justinstitt@xxxxxxxxxx>; Simon Horman <horms@xxxxxxxxxx>;
>Konstantin Khorenko <khorenko@xxxxxxxxxxxxx>; Sudarsana Reddy Kalluru
><sudarsana.kalluru@xxxxxxxxxx>; netdev@xxxxxxxxxxxxxxx; linux-
>kernel@xxxxxxxxxxxxxxx
>Subject: [PATCH 3/9] qed: avoid truncating work queue length
>
>From: Arnd Bergmann <arnd@xxxxxxxx>
>
>clang complains that the temporary string for the name passed into
>alloc_workqueue() is too short for its contents:
>
>drivers/net/ethernet/qlogic/qed/qed_main.c:1218:3: error: 'snprintf' will always
>be truncated; specified size is 16, but format string expands to at least 18 [-
>Werror,-Wformat-truncation]
>
>There is no need for a temporary buffer, and the actual name of a workqueue
>is 32 bytes (WQ_NAME_LEN), so just use the interface as intended to avoid
>the truncation.
>
>Fixes: 59ccf86fe69a ("qed: Add driver infrastucture for handling mfw requests.")
>Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
>---
> drivers/net/ethernet/qlogic/qed/qed_main.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
>diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c
>b/drivers/net/ethernet/qlogic/qed/qed_main.c
>index c278f8893042..8159b4c315b5 100644
>--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
>+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
>@@ -1206,7 +1206,6 @@ static void qed_slowpath_task(struct work_struct
>*work)
> static int qed_slowpath_wq_start(struct qed_dev *cdev)
> {
> struct qed_hwfn *hwfn;
>- char name[NAME_SIZE];
> int i;
>
> if (IS_VF(cdev))
>@@ -1215,11 +1214,11 @@ static int qed_slowpath_wq_start(struct qed_dev
>*cdev)
> for_each_hwfn(cdev, i) {
> hwfn = &cdev->hwfns[i];
>
>- snprintf(name, NAME_SIZE, "slowpath-%02x:%02x.%02x",
>- cdev->pdev->bus->number,
>- PCI_SLOT(cdev->pdev->devfn), hwfn->abs_pf_id);
>+ hwfn->slowpath_wq = alloc_workqueue("slowpath-
>%02x:%02x.%02x",
>+ 0, 0, cdev->pdev->bus->number,
>+ PCI_SLOT(cdev->pdev->devfn),
>+ hwfn->abs_pf_id);

Confused. This should be alloc_workqueue("slowpath-%02x:%02x.%02x", cdev->pdev->bus->number, PCI_SLOT(cdev->pdev->devfn), hwfn->abs_pf_id, 0, 0);
Right?

Thanks,
Sundeep
>
>- hwfn->slowpath_wq = alloc_workqueue(name, 0, 0);
> if (!hwfn->slowpath_wq) {
> DP_NOTICE(hwfn, "Cannot create slowpath
>workqueue\n");
> return -ENOMEM;
>--
>2.39.2
>