Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44ad1029 authored by Mark Starovoytov's avatar Mark Starovoytov Committed by Jinesh K. Jayakumar
Browse files

atlantic forwarding driver v1.0.25



  [ATLDRV-1118] - Page fault in atl_fwd_init_ring() upon ring creation (ATL_FWR_ALLOC_BUFS is not set)
  [ATLDRV-1119] - AQ058: again Bug CR 2491137 - Crash caused due to 32 Tx descs are zero'ed

Co-authored-by: default avatarDmitry Bogdanov <dmitry.bogdanov@aquantia.com>
Change-Id: I4d9992e1bf04a83f9c0c0c5aec1efa05e41b5772
Git-commit: 6a8d1d677a69c550a9eccd03a841f187f0d42dd4
Git-repo: https://github.com/aquantia/linux-4.14-atlantic-forwarding


Signed-off-by: default avatarJinesh K. Jayakumar <jineshk@codeaurora.org>
parent 6a0dfacb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
#include <linux/netdevice.h>
#include <linux/moduleparam.h>

#define ATL_VERSION "1.0.24"
#define ATL_VERSION "1.0.25"

struct atl_nic;
enum atl_fwd_notify;
+10 −2
Original line number Diff line number Diff line
@@ -242,17 +242,23 @@ static void atl_fwd_update_im(struct atl_fwd_ring *ring)

static void atl_fwd_init_descr(struct atl_fwd_ring *fwd_ring)
{
	struct atl_fwd_buf_frag *frag = &fwd_ring->bufs->frags[0];
	size_t frag_size = fwd_ring->bufs->frag_size;
	struct atl_hw_ring *ring = &fwd_ring->hw;
	int dir_tx = atl_fwd_ring_tx(fwd_ring);
	struct atl_fwd_buf_frag *frag = NULL;
	int buf_size = fwd_ring->buf_size;
	int ring_size = ring->size;
	size_t frag_size = 0;
	unsigned int pg_off;
	int i;

	memset(ring->descs, 0, ring_size * sizeof(*ring->descs));

	if (!(fwd_ring->flags & ATL_FWR_ALLOC_BUFS))
		return;

	frag = &fwd_ring->bufs->frags[0];
	frag_size = fwd_ring->bufs->frag_size;

	if (!(fwd_ring->flags & ATL_FWR_DONT_DMA_MAP)) {
		for (pg_off = 0, i = 0; i < ring_size; i++) {
			union atl_desc *desc = &ring->descs[i];
@@ -542,6 +548,7 @@ int atl_fwd_enable_ring(struct atl_fwd_ring *ring)
	struct atl_hw *hw = &ring->nic->hw;

	atl_set_bits(hw, ATL_RING_CTL(&ring->hw), BIT(31));
	atl_clear_bits(hw, ATL_RING_CTL(&ring->hw), BIT(30));
	ring->state |= ATL_FWR_ST_ENABLED;

	return 0;
@@ -556,6 +563,7 @@ void atl_fwd_disable_ring(struct atl_fwd_ring *ring)
		return;

	atl_clear_bits(hw, ATL_RING_CTL(&ring->hw), BIT(31));
	atl_set_bits(hw, ATL_RING_CTL(&ring->hw), BIT(30));
	ring->state &= ~ATL_FWR_ST_ENABLED;
}
EXPORT_SYMBOL(atl_fwd_disable_ring);
+5 −0
Original line number Diff line number Diff line
Version 1.0.25
==============
[ATLDRV-1118] - Page fault in atl_fwd_init_ring() upon ring creation (ATL_FWR_ALLOC_BUFS is not set)
[ATLDRV-1119] - AQ058: again Bug CR 2491137 - Crash caused due to 32 Tx descs are zero'ed

Version 1.0.24
==============
[ATLDRV-1112] - descriptor corruption after suspend/resume