From aa8f9171f2e779040d655db2cf96234b6e98610c Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Thu, 19 Jan 2012 19:51:54 +0000 Subject: [PATCH] kernel: fix OCF for linux 3.2 Add skb_frag_page from 3.2 to OCF for 3.1 and earlier and use it. SVN-Revision: 29818 --- package/kernel/modules/crypto.mk | 2 +- target/linux/generic/files/crypto/ocf/c7108/aes-7108.c | 4 ++-- target/linux/generic/files/crypto/ocf/criov.c | 2 +- .../generic/files/crypto/ocf/cryptocteon/cryptocteon.c | 2 +- target/linux/generic/files/crypto/ocf/cryptosoft.c | 2 +- target/linux/generic/files/crypto/ocf/hifn/hifn7751.c | 2 +- target/linux/generic/files/crypto/ocf/ocf-compat.h | 9 +++++++++ target/linux/generic/files/crypto/ocf/safe/safe.c | 2 +- .../linux/generic/files/crypto/ocf/ubsec_ssb/ubsec_ssb.c | 6 +++--- 9 files changed, 20 insertions(+), 11 deletions(-) diff --git a/package/kernel/modules/crypto.mk b/package/kernel/modules/crypto.mk index 44c4b5d7b7f..c8be6f9460b 100644 --- a/package/kernel/modules/crypto.mk +++ b/package/kernel/modules/crypto.mk @@ -401,7 +401,7 @@ $(eval $(call KernelPackage,crypto-misc)) define KernelPackage/crypto-ocf TITLE:=OCF modules - DEPENDS:=+@OPENSSL_ENGINE @!TARGET_uml +kmod-crypto-manager @!LINUX_3_2||BROKEN + DEPENDS:=+@OPENSSL_ENGINE @!TARGET_uml +kmod-crypto-manager KCONFIG:= \ CONFIG_OCF_OCF \ CONFIG_OCF_CRYPTODEV \ diff --git a/target/linux/generic/files/crypto/ocf/c7108/aes-7108.c b/target/linux/generic/files/crypto/ocf/c7108/aes-7108.c index a5ac0549572..d03540b64ef 100644 --- a/target/linux/generic/files/crypto/ocf/c7108/aes-7108.c +++ b/target/linux/generic/files/crypto/ocf/c7108/aes-7108.c @@ -592,13 +592,13 @@ c7108_process(void *arg, struct cryptop *crp, int hint) i < skb_shinfo(skb)->nr_frags && sg_num < SCATTERLIST_MAX; i++) { if (skip < skb_shinfo(skb)->frags[i].size) { - //sg[sg_num].page = skb_shinfo(skb)->frags[i].page; + //sg[sg_num].page = skb_frag_page(&kb_shinfo(skb)->frags[i]); //sg[sg_num].offset = skb_shinfo(skb)->frags[i].page_offset + skip; len = skb_shinfo(skb)->frags[i].size - skip; if (len + sg_len > crd->crd_len) len = crd->crd_len - sg_len; //sg[sg_num].length = len; - sg_set_page(&sg[sg_num], skb_shinfo(skb)->frags[i].page, len, skb_shinfo(skb)->frags[i].page_offset + skip); + sg_set_page(&sg[sg_num], skb_frag_page(&skb_shinfo(skb)->frags[i]), len, skb_shinfo(skb)->frags[i].page_offset + skip); sg_len += sg[sg_num].length; sg_num++; skip = 0; diff --git a/target/linux/generic/files/crypto/ocf/criov.c b/target/linux/generic/files/crypto/ocf/criov.c index d3d8cfd8f77..cdc731e29a4 100644 --- a/target/linux/generic/files/crypto/ocf/criov.c +++ b/target/linux/generic/files/crypto/ocf/criov.c @@ -156,7 +156,7 @@ skb_copy_bits_back(struct sk_buff *skb, int offset, caddr_t cp, int len) offset -= skb_headlen(skb); for (i = 0; len > 0 && i < skb_shinfo(skb)->nr_frags; i++) { if (offset < skb_shinfo(skb)->frags[i].size) { - memcpy(page_address(skb_shinfo(skb)->frags[i].page) + + memcpy(page_address(skb_frag_page(&skb_shinfo(skb)->frags[i])) + skb_shinfo(skb)->frags[i].page_offset, cp, min_t(int, skb_shinfo(skb)->frags[i].size, len)); len -= skb_shinfo(skb)->frags[i].size; diff --git a/target/linux/generic/files/crypto/ocf/cryptocteon/cryptocteon.c b/target/linux/generic/files/crypto/ocf/cryptocteon/cryptocteon.c index 741e4fa31d5..b0c10a295a6 100644 --- a/target/linux/generic/files/crypto/ocf/cryptocteon/cryptocteon.c +++ b/target/linux/generic/files/crypto/ocf/cryptocteon/cryptocteon.c @@ -473,7 +473,7 @@ octo_process(device_t dev, struct cryptop *crp, int hint) for (i = 0; i < skb_shinfo(skb)->nr_frags && sg_num < SCATTERLIST_MAX; i++) { len = skb_shinfo(skb)->frags[i].size; - sg_set_page(&sg[sg_num], skb_shinfo(skb)->frags[i].page, + sg_set_page(&sg[sg_num], skb_frag_page(&skb_shinfo(skb)->frags[i]), len, skb_shinfo(skb)->frags[i].page_offset); sg_len += len; sg_num++; diff --git a/target/linux/generic/files/crypto/ocf/cryptosoft.c b/target/linux/generic/files/crypto/ocf/cryptosoft.c index 79aac923600..f9ecdf927d4 100644 --- a/target/linux/generic/files/crypto/ocf/cryptosoft.c +++ b/target/linux/generic/files/crypto/ocf/cryptosoft.c @@ -777,7 +777,7 @@ static void swcr_process_req(struct swcr_req *req) if (len + sg_len > crd->crd_len) len = crd->crd_len - sg_len; sg_set_page(&req->sg[sg_num], - skb_shinfo(skb)->frags[i].page, + skb_frag_page(&skb_shinfo(skb)->frags[i]), len, skb_shinfo(skb)->frags[i].page_offset + skip); sg_len += len; diff --git a/target/linux/generic/files/crypto/ocf/hifn/hifn7751.c b/target/linux/generic/files/crypto/ocf/hifn/hifn7751.c index 4803a83a5a3..b7df81907c1 100644 --- a/target/linux/generic/files/crypto/ocf/hifn/hifn7751.c +++ b/target/linux/generic/files/crypto/ocf/hifn/hifn7751.c @@ -241,7 +241,7 @@ pci_map_skb(struct hifn_softc *sc,struct hifn_operand *buf,struct sk_buff *skb) for (i = 0; i < skb_shinfo(skb)->nr_frags; ) { buf->segs[buf->nsegs].ds_len = skb_shinfo(skb)->frags[i].size; buf->segs[buf->nsegs].ds_addr = pci_map_single(sc->sc_pcidev, - page_address(skb_shinfo(skb)->frags[i].page) + + page_address(skb_frag_page(&skb_shinfo(skb)->frags[i])) + skb_shinfo(skb)->frags[i].page_offset, buf->segs[buf->nsegs].ds_len, PCI_DMA_BIDIRECTIONAL); buf->mapsize += buf->segs[buf->nsegs].ds_len; diff --git a/target/linux/generic/files/crypto/ocf/ocf-compat.h b/target/linux/generic/files/crypto/ocf/ocf-compat.h index 2d985360f27..b76c369dd6d 100644 --- a/target/linux/generic/files/crypto/ocf/ocf-compat.h +++ b/target/linux/generic/files/crypto/ocf/ocf-compat.h @@ -359,6 +359,15 @@ static inline int ocf_run_thread(void *arg) #include #endif +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) +static inline struct page *skb_frag_page(const skb_frag_t *frag) +{ + return frag->page; +} +#endif + #endif /* __KERNEL__ */ /****************************************************************************/ diff --git a/target/linux/generic/files/crypto/ocf/safe/safe.c b/target/linux/generic/files/crypto/ocf/safe/safe.c index 189b95f6097..7d9b541177e 100644 --- a/target/linux/generic/files/crypto/ocf/safe/safe.c +++ b/target/linux/generic/files/crypto/ocf/safe/safe.c @@ -208,7 +208,7 @@ pci_map_skb(struct safe_softc *sc,struct safe_operand *buf,struct sk_buff *skb) for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { pci_map_linear(sc, buf, - page_address(skb_shinfo(skb)->frags[i].page) + + page_address(skb_frag_page(&skb_shinfo(skb)->frags[i])) + skb_shinfo(skb)->frags[i].page_offset, skb_shinfo(skb)->frags[i].size); } diff --git a/target/linux/generic/files/crypto/ocf/ubsec_ssb/ubsec_ssb.c b/target/linux/generic/files/crypto/ocf/ubsec_ssb/ubsec_ssb.c index aa0733f08b9..f5d7762360a 100644 --- a/target/linux/generic/files/crypto/ocf/ubsec_ssb/ubsec_ssb.c +++ b/target/linux/generic/files/crypto/ocf/ubsec_ssb/ubsec_ssb.c @@ -297,18 +297,18 @@ dma_map_skb(struct ubsec_softc *sc, struct ubsec_dma_alloc* q_map, struct sk_buf #ifdef UBSEC_VERBOSE_DEBUG DPRINTF("%s - map %d 0x%x %d\n", __FUNCTION__, i + 1, - (unsigned int)page_address(skb_shinfo(skb)->frags[i].page) + + (unsigned int)page_address(skb_frag_page(&skb_shinfo(skb)->frags[i])) + skb_shinfo(skb)->frags[i].page_offset, skb_shinfo(skb)->frags[i].size); #endif tmp = dma_map_single(sc->sc_dv, - page_address(skb_shinfo(skb)->frags[i].page) + + page_address(skb_frag_page(&skb_shinfo(skb)->frags[i])) + skb_shinfo(skb)->frags[i].page_offset, skb_shinfo(skb)->frags[i].size, DMA_BIDIRECTIONAL); q_map[i + 1].dma_paddr = tmp; - q_map[i + 1].dma_vaddr = (void*)(page_address(skb_shinfo(skb)->frags[i].page) + + q_map[i + 1].dma_vaddr = (void*)(page_address(skb_frag_page(&skb_shinfo(skb)->frags[i])) + skb_shinfo(skb)->frags[i].page_offset); q_map[i + 1].dma_size = skb_shinfo(skb)->frags[i].size; -- 2.30.2