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
This commit is contained in:
		@@ -401,7 +401,7 @@ $(eval $(call KernelPackage,crypto-misc))
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define KernelPackage/crypto-ocf
 | 
					define KernelPackage/crypto-ocf
 | 
				
			||||||
  TITLE:=OCF modules
 | 
					  TITLE:=OCF modules
 | 
				
			||||||
  DEPENDS:=+@OPENSSL_ENGINE @!TARGET_uml +kmod-crypto-manager @!LINUX_3_2||BROKEN
 | 
					  DEPENDS:=+@OPENSSL_ENGINE @!TARGET_uml +kmod-crypto-manager
 | 
				
			||||||
  KCONFIG:= \
 | 
					  KCONFIG:= \
 | 
				
			||||||
	CONFIG_OCF_OCF \
 | 
						CONFIG_OCF_OCF \
 | 
				
			||||||
	CONFIG_OCF_CRYPTODEV \
 | 
						CONFIG_OCF_CRYPTODEV \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -592,13 +592,13 @@ c7108_process(void *arg, struct cryptop *crp, int hint)
 | 
				
			|||||||
			 i < skb_shinfo(skb)->nr_frags &&
 | 
								 i < skb_shinfo(skb)->nr_frags &&
 | 
				
			||||||
			 sg_num < SCATTERLIST_MAX; i++) {
 | 
								 sg_num < SCATTERLIST_MAX; i++) {
 | 
				
			||||||
		    if (skip < skb_shinfo(skb)->frags[i].size) {
 | 
							    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;
 | 
								//sg[sg_num].offset = skb_shinfo(skb)->frags[i].page_offset + skip;
 | 
				
			||||||
			len = skb_shinfo(skb)->frags[i].size - skip;
 | 
								len = skb_shinfo(skb)->frags[i].size - skip;
 | 
				
			||||||
			if (len + sg_len > crd->crd_len)
 | 
								if (len + sg_len > crd->crd_len)
 | 
				
			||||||
			    len = crd->crd_len - sg_len;
 | 
								    len = crd->crd_len - sg_len;
 | 
				
			||||||
			//sg[sg_num].length = 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_len += sg[sg_num].length;
 | 
				
			||||||
			sg_num++;
 | 
								sg_num++;
 | 
				
			||||||
			skip = 0;
 | 
								skip = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -156,7 +156,7 @@ skb_copy_bits_back(struct sk_buff *skb, int offset, caddr_t cp, int len)
 | 
				
			|||||||
	offset -= skb_headlen(skb);
 | 
						offset -= skb_headlen(skb);
 | 
				
			||||||
	for (i = 0; len > 0 && i < skb_shinfo(skb)->nr_frags; i++) {
 | 
						for (i = 0; len > 0 && i < skb_shinfo(skb)->nr_frags; i++) {
 | 
				
			||||||
		if (offset < skb_shinfo(skb)->frags[i].size) {
 | 
							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,
 | 
										skb_shinfo(skb)->frags[i].page_offset,
 | 
				
			||||||
					cp, min_t(int, skb_shinfo(skb)->frags[i].size, len));
 | 
										cp, min_t(int, skb_shinfo(skb)->frags[i].size, len));
 | 
				
			||||||
			len -= skb_shinfo(skb)->frags[i].size;
 | 
								len -= skb_shinfo(skb)->frags[i].size;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
							for (i = 0; i < skb_shinfo(skb)->nr_frags && sg_num < SCATTERLIST_MAX;
 | 
				
			||||||
				i++) {
 | 
									i++) {
 | 
				
			||||||
			len = skb_shinfo(skb)->frags[i].size;
 | 
								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);
 | 
										len, skb_shinfo(skb)->frags[i].page_offset);
 | 
				
			||||||
			sg_len += len;
 | 
								sg_len += len;
 | 
				
			||||||
			sg_num++;
 | 
								sg_num++;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -777,7 +777,7 @@ static void swcr_process_req(struct swcr_req *req)
 | 
				
			|||||||
				if (len + sg_len > crd->crd_len)
 | 
									if (len + sg_len > crd->crd_len)
 | 
				
			||||||
					len = crd->crd_len - sg_len;
 | 
										len = crd->crd_len - sg_len;
 | 
				
			||||||
				sg_set_page(&req->sg[sg_num],
 | 
									sg_set_page(&req->sg[sg_num],
 | 
				
			||||||
					skb_shinfo(skb)->frags[i].page,
 | 
										skb_frag_page(&skb_shinfo(skb)->frags[i]),
 | 
				
			||||||
					len,
 | 
										len,
 | 
				
			||||||
					skb_shinfo(skb)->frags[i].page_offset + skip);
 | 
										skb_shinfo(skb)->frags[i].page_offset + skip);
 | 
				
			||||||
				sg_len += len;
 | 
									sg_len += len;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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; ) {
 | 
						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_len = skb_shinfo(skb)->frags[i].size;
 | 
				
			||||||
		buf->segs[buf->nsegs].ds_addr = pci_map_single(sc->sc_pcidev,
 | 
							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,
 | 
										skb_shinfo(skb)->frags[i].page_offset,
 | 
				
			||||||
				buf->segs[buf->nsegs].ds_len, PCI_DMA_BIDIRECTIONAL);
 | 
									buf->segs[buf->nsegs].ds_len, PCI_DMA_BIDIRECTIONAL);
 | 
				
			||||||
		buf->mapsize += buf->segs[buf->nsegs].ds_len;
 | 
							buf->mapsize += buf->segs[buf->nsegs].ds_len;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -359,6 +359,15 @@ static inline int ocf_run_thread(void *arg)
 | 
				
			|||||||
#include <linux/kthread.h>
 | 
					#include <linux/kthread.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <linux/skbuff.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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__ */
 | 
					#endif /* __KERNEL__ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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++) {
 | 
						for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
 | 
				
			||||||
		pci_map_linear(sc, buf,
 | 
							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].page_offset,
 | 
				
			||||||
				skb_shinfo(skb)->frags[i].size);
 | 
									skb_shinfo(skb)->frags[i].size);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -297,18 +297,18 @@ dma_map_skb(struct ubsec_softc *sc, struct ubsec_dma_alloc* q_map, struct sk_buf
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifdef UBSEC_VERBOSE_DEBUG
 | 
					#ifdef UBSEC_VERBOSE_DEBUG
 | 
				
			||||||
        DPRINTF("%s - map %d 0x%x %d\n", __FUNCTION__, i + 1, 
 | 
					        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);
 | 
					            skb_shinfo(skb)->frags[i].page_offset, skb_shinfo(skb)->frags[i].size);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tmp = dma_map_single(sc->sc_dv,
 | 
					        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].page_offset, 
 | 
				
			||||||
                             skb_shinfo(skb)->frags[i].size,
 | 
					                             skb_shinfo(skb)->frags[i].size,
 | 
				
			||||||
                             DMA_BIDIRECTIONAL);
 | 
					                             DMA_BIDIRECTIONAL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        q_map[i + 1].dma_paddr = tmp;
 | 
					        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);
 | 
					                                  skb_shinfo(skb)->frags[i].page_offset);
 | 
				
			||||||
        q_map[i + 1].dma_size = skb_shinfo(skb)->frags[i].size;
 | 
					        q_map[i + 1].dma_size = skb_shinfo(skb)->frags[i].size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user