igc: return an error if the mac type is unknown in igc_ptp_systim_to_hwtstamp()
authorTom Rix <trix@redhat.com>
Tue, 31 Jan 2023 21:54:37 +0000 (13:54 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 2 Feb 2023 05:19:57 +0000 (21:19 -0800)
clang static analysis reports
drivers/net/ethernet/intel/igc/igc_ptp.c:673:3: warning: The left operand of
  '+' is a garbage value [core.UndefinedBinaryOperatorResult]
   ktime_add_ns(shhwtstamps.hwtstamp, adjust);
   ^            ~~~~~~~~~~~~~~~~~~~~

igc_ptp_systim_to_hwtstamp() silently returns without setting the hwtstamp
if the mac type is unknown.  This should be treated as an error.

Fixes: 81b055205e8b ("igc: Add support for RX timestamping")
Signed-off-by: Tom Rix <trix@redhat.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Acked-by: Sasha Neftin <sasha.neftin@intel.com>
Tested-by: Naama Meir <naamax.meir@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://lore.kernel.org/r/20230131215437.1528994-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/intel/igc/igc_ptp.c

index c34734d432e0d726b4e15f7cdd14c80f8eb4630e..4e10ced736dbb5855d0389b8c4636c22c52c06a2 100644 (file)
@@ -417,10 +417,12 @@ static int igc_ptp_verify_pin(struct ptp_clock_info *ptp, unsigned int pin,
  *
  * We need to convert the system time value stored in the RX/TXSTMP registers
  * into a hwtstamp which can be used by the upper level timestamping functions.
+ *
+ * Returns 0 on success.
  **/
-static void igc_ptp_systim_to_hwtstamp(struct igc_adapter *adapter,
-                                      struct skb_shared_hwtstamps *hwtstamps,
-                                      u64 systim)
+static int igc_ptp_systim_to_hwtstamp(struct igc_adapter *adapter,
+                                     struct skb_shared_hwtstamps *hwtstamps,
+                                     u64 systim)
 {
        switch (adapter->hw.mac.type) {
        case igc_i225:
@@ -430,8 +432,9 @@ static void igc_ptp_systim_to_hwtstamp(struct igc_adapter *adapter,
                                                systim & 0xFFFFFFFF);
                break;
        default:
-               break;
+               return -EINVAL;
        }
+       return 0;
 }
 
 /**
@@ -652,7 +655,8 @@ static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter)
 
        regval = rd32(IGC_TXSTMPL);
        regval |= (u64)rd32(IGC_TXSTMPH) << 32;
-       igc_ptp_systim_to_hwtstamp(adapter, &shhwtstamps, regval);
+       if (igc_ptp_systim_to_hwtstamp(adapter, &shhwtstamps, regval))
+               return;
 
        switch (adapter->link_speed) {
        case SPEED_10: