The branch main has been updated by np:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=2965ae59144177eb3570721295da9cbc447f1105

commit 2965ae59144177eb3570721295da9cbc447f1105
Author:     Navdeep Parhar <n...@freebsd.org>
AuthorDate: 2024-02-14 01:28:53 +0000
Commit:     Navdeep Parhar <n...@freebsd.org>
CommitDate: 2024-04-29 20:51:41 +0000

    cxgbe(4): Shared code update to deal with partial failure in query_params.
    
    Obtained from:  Chelsio Communications
    MFC after:      1 week
    Sponsored by:   Chelsio Communications
---
 sys/dev/cxgbe/common/t4_hw.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/sys/dev/cxgbe/common/t4_hw.c b/sys/dev/cxgbe/common/t4_hw.c
index bb2ed5e4d820..360d44847004 100644
--- a/sys/dev/cxgbe/common/t4_hw.c
+++ b/sys/dev/cxgbe/common/t4_hw.c
@@ -7740,9 +7740,18 @@ int t4_query_params_rw(struct adapter *adap, unsigned 
int mbox, unsigned int pf,
        }
 
        ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
-       if (ret == 0)
-               for (i = 0, p = &c.param[0].val; i < nparams; i++, p += 2)
-                       *val++ = be32_to_cpu(*p);
+
+       /*
+        * We always copy back the results, even if there's an error.  We'll
+        * get an error if any of the parameters was unknown to the Firmware,
+        * but there will be results for the others ...  (Older Firmware
+        * stopped at the first unknown parameter; newer Firmware processes
+        * them all and flags the unknown parameters with a return value of
+        * ~0UL.)
+        */
+       for (i = 0, p = &c.param[0].val; i < nparams; i++, p += 2)
+               *val++ = be32_to_cpu(*p);
+
        return ret;
 }
 

Reply via email to