diff --git sys/compat/linuxkpi/common/src/linux_skbuff.c sys/compat/linuxkpi/common/src/linux_skbuff.c index dfa9dfb2ceb4..683109d08b3a 100644 --- sys/compat/linuxkpi/common/src/linux_skbuff.c +++ sys/compat/linuxkpi/common/src/linux_skbuff.c @@ -40,6 +40,8 @@ __FBSDID("$FreeBSD$"); #include "opt_ddb.h" +#define LKPI_SKB_4G_TEST + #include #include #include @@ -53,6 +55,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#ifndef LKPI_SKB_4G_TEST +#include +#endif #ifdef SKB_DEBUG SYSCTL_DECL(_compat_linuxkpi); @@ -77,7 +82,13 @@ linuxkpi_alloc_skb(size_t size, gfp_t gfp) * Using our own type here not backing my kmalloc. * We assume no one calls kfree directly on the skb. */ +#ifndef LKPI_SKB_4G_TEST skb = malloc(len, M_LKPISKB, linux_check_m_flags(gfp) | M_ZERO); +#else + len = roundup_pow_of_two(len); + skb = contigmalloc(len, M_LKPISKB, linux_check_m_flags(gfp) | M_ZERO, + 0, 0xffffffff, PAGE_SIZE, 0); +#endif if (skb == NULL) return (skb); skb->_alloc_len = len; @@ -156,7 +167,11 @@ linuxkpi_kfree_skb(struct sk_buff *skb) } } +#ifndef LKPI_SKB_4G_TEST free(skb, M_LKPISKB); +#else + contigfree(skb, skb->_alloc_len, M_LKPISKB); +#endif } #ifdef DDB