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:
Russ Meyerriecks 2015-04-16 12:08:25 -05:00
parent 5aaaaf9d2f
commit 62d7a00fdc

View File

@ -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;
}
}
}