wctc4xxp: Fix continuous "errored receive packets" with 2+ transcoders
In the case where two transcoders are loaded in a system and one transcoder
experiences an errored receive packet condition, the logic would ping pong the
error between the two cards, causing a runaway stream of errors in the kernel
log.
This fix moves the global error count var into the wcdte struct to allow for
per-card logic.
Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>
(cherry picked from commit 4df03284a8
)
This commit is contained in:
parent
5aaaaf9d2f
commit
62d7a00fdc
@ -375,6 +375,7 @@ struct wcdte {
|
||||
#endif
|
||||
struct timer_list watchdog;
|
||||
u16 open_channels;
|
||||
unsigned long packet_errors;
|
||||
};
|
||||
|
||||
struct wcdte_netdev_priv {
|
||||
@ -2019,14 +2020,16 @@ wctc4xxp_disable_polling(struct wcdte *wc)
|
||||
|
||||
static void wctc4xxp_check_for_rx_errors(struct wcdte *wc)
|
||||
{
|
||||
static unsigned long last_errors = 0;
|
||||
/* get_packet_errors() returns the accumulated total errors */
|
||||
unsigned long errors = wctc4xxp_get_packet_errors(wc->rxd);
|
||||
if (last_errors != errors) {
|
||||
|
||||
/* Print warning when the number of errors changes */
|
||||
if (wc->packet_errors != errors) {
|
||||
if (printk_ratelimit()) {
|
||||
dev_err(&wc->pdev->dev,
|
||||
"%lu errored receive packets.\n",
|
||||
errors - last_errors);
|
||||
last_errors = errors;
|
||||
errors - wc->packet_errors);
|
||||
wc->packet_errors = errors;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user