From 716ca530e1c4515d8683c9d5be3d56b301758b66 Mon Sep 17 00:00:00 2001 From: James <> Date: Wed, 4 Nov 2015 11:49:21 +0000 Subject: trunk-47381 --- ...ve-shadow-copy-of-CE-descriptors-for-sour.patch | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch (limited to 'package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch') diff --git a/package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch b/package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch new file mode 100644 index 0000000..5bd8833 --- /dev/null +++ b/package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch @@ -0,0 +1,90 @@ +From: Rajkumar Manoharan +Date: Fri, 23 Oct 2015 18:01:06 +0530 +Subject: [PATCH] ath10k: remove shadow copy of CE descriptors for source + ring + +For the messages from host to target, shadow copy of CE descriptors +are maintained in source ring. Before writing actual CE descriptor, +first shadow copy is filled and then it is copied to CE address space. +To optimize in download path and to reduce d-cache pressure, removing +shadow copy of CE descriptors. This will also reduce driver memory +consumption by 33KB during on device probing. + +Signed-off-by: Rajkumar Manoharan +Signed-off-by: Kalle Valo +--- + +--- a/drivers/net/wireless/ath/ath10k/ce.c ++++ b/drivers/net/wireless/ath/ath10k/ce.c +@@ -921,27 +921,6 @@ ath10k_ce_alloc_src_ring(struct ath10k * + src_ring->base_addr_ce_space_unaligned, + CE_DESC_RING_ALIGN); + +- /* +- * Also allocate a shadow src ring in regular +- * mem to use for faster access. +- */ +- src_ring->shadow_base_unaligned = +- kmalloc((nentries * sizeof(struct ce_desc) + +- CE_DESC_RING_ALIGN), GFP_KERNEL); +- if (!src_ring->shadow_base_unaligned) { +- dma_free_coherent(ar->dev, +- (nentries * sizeof(struct ce_desc) + +- CE_DESC_RING_ALIGN), +- src_ring->base_addr_owner_space, +- src_ring->base_addr_ce_space); +- kfree(src_ring); +- return ERR_PTR(-ENOMEM); +- } +- +- src_ring->shadow_base = PTR_ALIGN( +- src_ring->shadow_base_unaligned, +- CE_DESC_RING_ALIGN); +- + return src_ring; + } + +@@ -1120,7 +1099,6 @@ void ath10k_ce_free_pipe(struct ath10k * + struct ath10k_ce_pipe *ce_state = &ar_pci->ce_states[ce_id]; + + if (ce_state->src_ring) { +- kfree(ce_state->src_ring->shadow_base_unaligned); + dma_free_coherent(ar->dev, + (ce_state->src_ring->nentries * + sizeof(struct ce_desc) + +--- a/drivers/net/wireless/ath/ath10k/ce.h ++++ b/drivers/net/wireless/ath/ath10k/ce.h +@@ -100,12 +100,6 @@ struct ath10k_ce_ring { + + /* CE address space */ + u32 base_addr_ce_space; +- /* +- * Start of shadow copy of descriptors, within regular memory. +- * Aligned to descriptor-size boundary. +- */ +- void *shadow_base_unaligned; +- struct ce_desc *shadow_base; + + /* keep last */ + void *per_transfer_context[0]; +--- a/drivers/net/wireless/ath/ath10k/pci.c ++++ b/drivers/net/wireless/ath/ath10k/pci.c +@@ -1594,7 +1594,6 @@ static void ath10k_pci_tx_pipe_cleanup(s + struct ath10k_pci *ar_pci; + struct ath10k_ce_pipe *ce_pipe; + struct ath10k_ce_ring *ce_ring; +- struct ce_desc *ce_desc; + struct sk_buff *skb; + int i; + +@@ -1609,10 +1608,6 @@ static void ath10k_pci_tx_pipe_cleanup(s + if (!pci_pipe->buf_sz) + return; + +- ce_desc = ce_ring->shadow_base; +- if (WARN_ON(!ce_desc)) +- return; +- + for (i = 0; i < ce_ring->nentries; i++) { + skb = ce_ring->per_transfer_context[i]; + if (!skb) -- cgit v1.2.3