|
Takashi Iwai |
157343 |
From 49d28ebdf1e30d806410eefc7de0a7a1ca5d747c Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
157343 |
From: Alexander Sverdlin <alexander.sverdlin@nokia.com>
|
|
Takashi Iwai |
157343 |
Date: Fri, 16 Oct 2020 16:56:30 +0200
|
|
Takashi Iwai |
157343 |
Subject: [PATCH] staging: octeon: Drop on uncorrectable alignment or FCS error
|
|
Takashi Iwai |
157343 |
Git-commit: 49d28ebdf1e30d806410eefc7de0a7a1ca5d747c
|
|
Takashi Iwai |
157343 |
Patch-mainline: v5.10-rc2
|
|
Takashi Iwai |
157343 |
References: git-fixes
|
|
Takashi Iwai |
157343 |
|
|
Takashi Iwai |
157343 |
Currently in case of alignment or FCS error if the packet cannot be
|
|
Takashi Iwai |
157343 |
corrected it's still not dropped. Report the error properly and drop the
|
|
Takashi Iwai |
157343 |
packet while making the code around a little bit more readable.
|
|
Takashi Iwai |
157343 |
|
|
Takashi Iwai |
157343 |
Fixes: 80ff0fd3ab64 ("Staging: Add octeon-ethernet driver files.")
|
|
Takashi Iwai |
157343 |
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
|
|
Takashi Iwai |
157343 |
Cc: stable <stable@vger.kernel.org>
|
|
Takashi Iwai |
157343 |
Link: https://lore.kernel.org/r/20201016145630.41852-1-alexander.sverdlin@nokia.com
|
|
Takashi Iwai |
157343 |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Takashi Iwai |
157343 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
157343 |
|
|
Takashi Iwai |
157343 |
---
|
|
Takashi Iwai |
157343 |
drivers/staging/octeon/ethernet-rx.c | 34 +++++++++++++++++++---------------
|
|
Takashi Iwai |
157343 |
1 file changed, 19 insertions(+), 15 deletions(-)
|
|
Takashi Iwai |
157343 |
|
|
Takashi Iwai |
157343 |
--- a/drivers/staging/octeon/ethernet-rx.c
|
|
Takashi Iwai |
157343 |
+++ b/drivers/staging/octeon/ethernet-rx.c
|
|
Takashi Iwai |
157343 |
@@ -83,15 +83,17 @@ static inline int cvm_oct_check_rcv_erro
|
|
Takashi Iwai |
157343 |
else
|
|
Takashi Iwai |
157343 |
port = work->word1.cn38xx.ipprt;
|
|
Takashi Iwai |
157343 |
|
|
Takashi Iwai |
157343 |
- if ((work->word2.snoip.err_code == 10) && (work->word1.len <= 64)) {
|
|
Takashi Iwai |
157343 |
+ if ((work->word2.snoip.err_code == 10) && (work->word1.len <= 64))
|
|
Takashi Iwai |
157343 |
/*
|
|
Takashi Iwai |
157343 |
* Ignore length errors on min size packets. Some
|
|
Takashi Iwai |
157343 |
* equipment incorrectly pads packets to 64+4FCS
|
|
Takashi Iwai |
157343 |
* instead of 60+4FCS. Note these packets still get
|
|
Takashi Iwai |
157343 |
* counted as frame errors.
|
|
Takashi Iwai |
157343 |
*/
|
|
Takashi Iwai |
157343 |
- } else if (work->word2.snoip.err_code == 5 ||
|
|
Takashi Iwai |
157343 |
- work->word2.snoip.err_code == 7) {
|
|
Takashi Iwai |
157343 |
+ return 0;
|
|
Takashi Iwai |
157343 |
+
|
|
Takashi Iwai |
157343 |
+ if (work->word2.snoip.err_code == 5 ||
|
|
Takashi Iwai |
157343 |
+ work->word2.snoip.err_code == 7) {
|
|
Takashi Iwai |
157343 |
/*
|
|
Takashi Iwai |
157343 |
* We received a packet with either an alignment error
|
|
Takashi Iwai |
157343 |
* or a FCS error. This may be signalling that we are
|
|
Takashi Iwai |
157343 |
@@ -122,7 +124,10 @@ static inline int cvm_oct_check_rcv_erro
|
|
Takashi Iwai |
157343 |
/* Port received 0xd5 preamble */
|
|
Takashi Iwai |
157343 |
work->packet_ptr.s.addr += i + 1;
|
|
Takashi Iwai |
157343 |
work->word1.len -= i + 5;
|
|
Takashi Iwai |
157343 |
- } else if ((*ptr & 0xf) == 0xd) {
|
|
Takashi Iwai |
157343 |
+ return 0;
|
|
Takashi Iwai |
157343 |
+ }
|
|
Takashi Iwai |
157343 |
+
|
|
Takashi Iwai |
157343 |
+ if ((*ptr & 0xf) == 0xd) {
|
|
Takashi Iwai |
157343 |
/* Port received 0xd preamble */
|
|
Takashi Iwai |
157343 |
work->packet_ptr.s.addr += i;
|
|
Takashi Iwai |
157343 |
work->word1.len -= i + 4;
|
|
Takashi Iwai |
157343 |
@@ -132,21 +137,20 @@ static inline int cvm_oct_check_rcv_erro
|
|
Takashi Iwai |
157343 |
((*(ptr + 1) & 0xf) << 4);
|
|
Takashi Iwai |
157343 |
ptr++;
|
|
Takashi Iwai |
157343 |
}
|
|
Takashi Iwai |
157343 |
- } else {
|
|
Takashi Iwai |
157343 |
- printk_ratelimited("Port %d unknown preamble, packet dropped\n",
|
|
Takashi Iwai |
157343 |
- port);
|
|
Takashi Iwai |
157343 |
- cvm_oct_free_work(work);
|
|
Takashi Iwai |
157343 |
- return 1;
|
|
Takashi Iwai |
157343 |
+ return 0;
|
|
Takashi Iwai |
157343 |
}
|
|
Takashi Iwai |
157343 |
+
|
|
Takashi Iwai |
157343 |
+ printk_ratelimited("Port %d unknown preamble, packet dropped\n",
|
|
Takashi Iwai |
157343 |
+ port);
|
|
Takashi Iwai |
157343 |
+ cvm_oct_free_work(work);
|
|
Takashi Iwai |
157343 |
+ return 1;
|
|
Takashi Iwai |
157343 |
}
|
|
Takashi Iwai |
157343 |
- } else {
|
|
Takashi Iwai |
157343 |
- printk_ratelimited("Port %d receive error code %d, packet dropped\n",
|
|
Takashi Iwai |
157343 |
- port, work->word2.snoip.err_code);
|
|
Takashi Iwai |
157343 |
- cvm_oct_free_work(work);
|
|
Takashi Iwai |
157343 |
- return 1;
|
|
Takashi Iwai |
157343 |
}
|
|
Takashi Iwai |
157343 |
|
|
Takashi Iwai |
157343 |
- return 0;
|
|
Takashi Iwai |
157343 |
+ printk_ratelimited("Port %d receive error code %d, packet dropped\n",
|
|
Takashi Iwai |
157343 |
+ port, work->word2.snoip.err_code);
|
|
Takashi Iwai |
157343 |
+ cvm_oct_free_work(work);
|
|
Takashi Iwai |
157343 |
+ return 1;
|
|
Takashi Iwai |
157343 |
}
|
|
Takashi Iwai |
157343 |
|
|
Takashi Iwai |
157343 |
static int cvm_oct_poll(struct oct_rx_group *rx_group, int budget)
|