Skip to content

Commit bed6e86

Browse files
committed
Merge branch 'net-remove-kmap_atomic'
Anirudh Venkataramanan says: ==================== net: Remove uses of kmap_atomic() kmap_atomic() is being deprecated. This little series replaces the last few uses of kmap_atomic() in the networking subsystem. This series triggered a suggestion [1] that perhaps the Sun Cassini, LDOM Virtual Switch Driver and the LDOM virtual network drivers should be removed completely. I plan to do this in a follow up patchset. For completeness, this series still includes kmap_atomic() conversions that apply to the above referenced drivers. If for some reason we choose to not remove these drivers, at least they won't be using kmap_atomic() anymore. Also, the following maintainer entries for the Chelsio driver seem to be defunct: Vinay Kumar Yadav <[email protected]> Rohit Maheshwari <[email protected]> I can submit a follow up patch to remove these entries, but thought maybe the folks over at Chelsio would want to look into this first. Changes v1 -> v2: Use memcpy_from_page() in patches 2/6 and 4/6 Add new patch for the thunderbolt driver Update commit messages and cover letter ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 8781994 + c3a8d37 commit bed6e86

File tree

5 files changed

+35
-55
lines changed

5 files changed

+35
-55
lines changed

drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1839,9 +1839,7 @@ static int chcr_short_record_handler(struct chcr_ktls_info *tx_info,
18391839
*/
18401840
if (prior_data_len) {
18411841
int i = 0;
1842-
u8 *data = NULL;
18431842
skb_frag_t *f;
1844-
u8 *vaddr;
18451843
int frag_size = 0, frag_delta = 0;
18461844

18471845
while (remaining > 0) {
@@ -1853,24 +1851,24 @@ static int chcr_short_record_handler(struct chcr_ktls_info *tx_info,
18531851
i++;
18541852
}
18551853
f = &record->frags[i];
1856-
vaddr = kmap_atomic(skb_frag_page(f));
1857-
1858-
data = vaddr + skb_frag_off(f) + remaining;
18591854
frag_delta = skb_frag_size(f) - remaining;
18601855

18611856
if (frag_delta >= prior_data_len) {
1862-
memcpy(prior_data, data, prior_data_len);
1863-
kunmap_atomic(vaddr);
1857+
memcpy_from_page(prior_data, skb_frag_page(f),
1858+
skb_frag_off(f) + remaining,
1859+
prior_data_len);
18641860
} else {
1865-
memcpy(prior_data, data, frag_delta);
1866-
kunmap_atomic(vaddr);
1861+
memcpy_from_page(prior_data, skb_frag_page(f),
1862+
skb_frag_off(f) + remaining,
1863+
frag_delta);
1864+
18671865
/* get the next page */
18681866
f = &record->frags[i + 1];
1869-
vaddr = kmap_atomic(skb_frag_page(f));
1870-
data = vaddr + skb_frag_off(f);
1871-
memcpy(prior_data + frag_delta,
1872-
data, (prior_data_len - frag_delta));
1873-
kunmap_atomic(vaddr);
1867+
1868+
memcpy_from_page(prior_data + frag_delta,
1869+
skb_frag_page(f),
1870+
skb_frag_off(f),
1871+
prior_data_len - frag_delta);
18741872
}
18751873
/* reset tcp_seq as per the prior_data_required len */
18761874
tcp_seq -= prior_data_len;

drivers/net/ethernet/sfc/tx.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,11 @@ static void efx_skb_copy_bits_to_pio(struct efx_nic *efx, struct sk_buff *skb,
207207
skb_frag_t *f = &skb_shinfo(skb)->frags[i];
208208
u8 *vaddr;
209209

210-
vaddr = kmap_atomic(skb_frag_page(f));
210+
vaddr = kmap_local_page(skb_frag_page(f));
211211

212212
efx_memcpy_toio_aligned_cb(efx, piobuf, vaddr + skb_frag_off(f),
213213
skb_frag_size(f), copy_buf);
214-
kunmap_atomic(vaddr);
214+
kunmap_local(vaddr);
215215
}
216216

217217
EFX_WARN_ON_ONCE_PARANOID(skb_shinfo(skb)->frag_list);

drivers/net/ethernet/sun/cassini.c

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,6 @@
9090
#include <linux/uaccess.h>
9191
#include <linux/jiffies.h>
9292

93-
#define cas_page_map(x) kmap_atomic((x))
94-
#define cas_page_unmap(x) kunmap_atomic((x))
9593
#define CAS_NCPUS num_online_cpus()
9694

9795
#define cas_skb_release(x) netif_rx(x)
@@ -1915,7 +1913,7 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
19151913
int off, swivel = RX_SWIVEL_OFF_VAL;
19161914
struct cas_page *page;
19171915
struct sk_buff *skb;
1918-
void *addr, *crcaddr;
1916+
void *crcaddr;
19191917
__sum16 csum;
19201918
char *p;
19211919

@@ -1936,7 +1934,7 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
19361934
skb_reserve(skb, swivel);
19371935

19381936
p = skb->data;
1939-
addr = crcaddr = NULL;
1937+
crcaddr = NULL;
19401938
if (hlen) { /* always copy header pages */
19411939
i = CAS_VAL(RX_COMP2_HDR_INDEX, words[1]);
19421940
page = cp->rx_pages[CAS_VAL(RX_INDEX_RING, i)][CAS_VAL(RX_INDEX_NUM, i)];
@@ -1948,12 +1946,10 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
19481946
i += cp->crc_size;
19491947
dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
19501948
i, DMA_FROM_DEVICE);
1951-
addr = cas_page_map(page->buffer);
1952-
memcpy(p, addr + off, i);
1949+
memcpy(p, page_address(page->buffer) + off, i);
19531950
dma_sync_single_for_device(&cp->pdev->dev,
19541951
page->dma_addr + off, i,
19551952
DMA_FROM_DEVICE);
1956-
cas_page_unmap(addr);
19571953
RX_USED_ADD(page, 0x100);
19581954
p += hlen;
19591955
swivel = 0;
@@ -1984,12 +1980,11 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
19841980
/* make sure we always copy a header */
19851981
swivel = 0;
19861982
if (p == (char *) skb->data) { /* not split */
1987-
addr = cas_page_map(page->buffer);
1988-
memcpy(p, addr + off, RX_COPY_MIN);
1983+
memcpy(p, page_address(page->buffer) + off,
1984+
RX_COPY_MIN);
19891985
dma_sync_single_for_device(&cp->pdev->dev,
19901986
page->dma_addr + off, i,
19911987
DMA_FROM_DEVICE);
1992-
cas_page_unmap(addr);
19931988
off += RX_COPY_MIN;
19941989
swivel = RX_COPY_MIN;
19951990
RX_USED_ADD(page, cp->mtu_stride);
@@ -2036,10 +2031,8 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
20362031
RX_USED_ADD(page, hlen + cp->crc_size);
20372032
}
20382033

2039-
if (cp->crc_size) {
2040-
addr = cas_page_map(page->buffer);
2041-
crcaddr = addr + off + hlen;
2042-
}
2034+
if (cp->crc_size)
2035+
crcaddr = page_address(page->buffer) + off + hlen;
20432036

20442037
} else {
20452038
/* copying packet */
@@ -2061,12 +2054,10 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
20612054
i += cp->crc_size;
20622055
dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
20632056
i, DMA_FROM_DEVICE);
2064-
addr = cas_page_map(page->buffer);
2065-
memcpy(p, addr + off, i);
2057+
memcpy(p, page_address(page->buffer) + off, i);
20662058
dma_sync_single_for_device(&cp->pdev->dev,
20672059
page->dma_addr + off, i,
20682060
DMA_FROM_DEVICE);
2069-
cas_page_unmap(addr);
20702061
if (p == (char *) skb->data) /* not split */
20712062
RX_USED_ADD(page, cp->mtu_stride);
20722063
else
@@ -2081,20 +2072,17 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
20812072
page->dma_addr,
20822073
dlen + cp->crc_size,
20832074
DMA_FROM_DEVICE);
2084-
addr = cas_page_map(page->buffer);
2085-
memcpy(p, addr, dlen + cp->crc_size);
2075+
memcpy(p, page_address(page->buffer), dlen + cp->crc_size);
20862076
dma_sync_single_for_device(&cp->pdev->dev,
20872077
page->dma_addr,
20882078
dlen + cp->crc_size,
20892079
DMA_FROM_DEVICE);
2090-
cas_page_unmap(addr);
20912080
RX_USED_ADD(page, dlen + cp->crc_size);
20922081
}
20932082
end_copy_pkt:
2094-
if (cp->crc_size) {
2095-
addr = NULL;
2083+
if (cp->crc_size)
20962084
crcaddr = skb->data + alloclen;
2097-
}
2085+
20982086
skb_put(skb, alloclen);
20992087
}
21002088

@@ -2103,8 +2091,6 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc,
21032091
/* checksum includes FCS. strip it out. */
21042092
csum = csum_fold(csum_partial(crcaddr, cp->crc_size,
21052093
csum_unfold(csum)));
2106-
if (addr)
2107-
cas_page_unmap(addr);
21082094
}
21092095
skb->protocol = eth_type_trans(skb, cp->dev);
21102096
if (skb->protocol == htons(ETH_P_IP)) {
@@ -2793,18 +2779,14 @@ static inline int cas_xmit_tx_ringN(struct cas *cp, int ring,
27932779

27942780
tabort = cas_calc_tabort(cp, skb_frag_off(fragp), len);
27952781
if (unlikely(tabort)) {
2796-
void *addr;
2797-
27982782
/* NOTE: len is always > tabort */
27992783
cas_write_txd(cp, ring, entry, mapping, len - tabort,
28002784
ctrl, 0);
28012785
entry = TX_DESC_NEXT(ring, entry);
2802-
2803-
addr = cas_page_map(skb_frag_page(fragp));
2804-
memcpy(tx_tiny_buf(cp, ring, entry),
2805-
addr + skb_frag_off(fragp) + len - tabort,
2806-
tabort);
2807-
cas_page_unmap(addr);
2786+
memcpy_from_page(tx_tiny_buf(cp, ring, entry),
2787+
skb_frag_page(fragp),
2788+
skb_frag_off(fragp) + len - tabort,
2789+
tabort);
28082790
mapping = tx_tiny_map(cp, ring, entry, tentry);
28092791
len = tabort;
28102792
}

drivers/net/ethernet/sun/sunvnet_common.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,13 +1085,13 @@ static inline int vnet_skb_map(struct ldc_channel *lp, struct sk_buff *skb,
10851085
u8 *vaddr;
10861086

10871087
if (nc < ncookies) {
1088-
vaddr = kmap_atomic(skb_frag_page(f));
1088+
vaddr = kmap_local_page(skb_frag_page(f));
10891089
blen = skb_frag_size(f);
10901090
blen += 8 - (blen & 7);
10911091
err = ldc_map_single(lp, vaddr + skb_frag_off(f),
10921092
blen, cookies + nc, ncookies - nc,
10931093
map_perm);
1094-
kunmap_atomic(vaddr);
1094+
kunmap_local(vaddr);
10951095
} else {
10961096
err = -EMSGSIZE;
10971097
}

drivers/net/thunderbolt.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ static void *tbnet_kmap_frag(struct sk_buff *skb, unsigned int frag_num,
10511051
const skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_num];
10521052

10531053
*len = skb_frag_size(frag);
1054-
return kmap_atomic(skb_frag_page(frag)) + skb_frag_off(frag);
1054+
return kmap_local_page(skb_frag_page(frag)) + skb_frag_off(frag);
10551055
}
10561056

10571057
static netdev_tx_t tbnet_start_xmit(struct sk_buff *skb,
@@ -1109,7 +1109,7 @@ static netdev_tx_t tbnet_start_xmit(struct sk_buff *skb,
11091109
dest += len;
11101110

11111111
if (unmap) {
1112-
kunmap_atomic(src);
1112+
kunmap_local(src);
11131113
unmap = false;
11141114
}
11151115

@@ -1147,7 +1147,7 @@ static netdev_tx_t tbnet_start_xmit(struct sk_buff *skb,
11471147
dest += len;
11481148

11491149
if (unmap) {
1150-
kunmap_atomic(src);
1150+
kunmap_local(src);
11511151
unmap = false;
11521152
}
11531153

@@ -1162,7 +1162,7 @@ static netdev_tx_t tbnet_start_xmit(struct sk_buff *skb,
11621162
memcpy(dest, src, data_len);
11631163

11641164
if (unmap)
1165-
kunmap_atomic(src);
1165+
kunmap_local(src);
11661166

11671167
if (!tbnet_xmit_csum_and_map(net, skb, frames, frame_index + 1))
11681168
goto err_drop;

0 commit comments

Comments
 (0)