diff --git a/linux/trunk/PKGBUILD b/linux/trunk/PKGBUILD index fcaae6d..4d916bc 100644 --- a/linux/trunk/PKGBUILD +++ b/linux/trunk/PKGBUILD @@ -6,7 +6,7 @@ pkgbase=linux # Build stock -ARCH kernel #pkgbase=linux-custom # Build kernel with a different name _srcname=linux-3.11 pkgver=3.11.1 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') url="http://www.kernel.org/" license=('GPL2') @@ -19,14 +19,16 @@ source=("http://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.xz" # standard config files for mkinitcpio ramdisk 'linux.preset' 'change-default-console-loglevel.patch' - 'criu-no-expert.patch') + 'criu-no-expert.patch' + 'skge.patch') md5sums=('fea363551ff45fbe4cb88497b863b261' '43331cad943b9540afea49ad8ce5cf46' '247d9bafa184e2d9a27c1a0485419fff' '5effb245b8ec78ad570b3e5962a1a7e0' 'eb14dcfd80c00852ef81ded6e826826a' '98beb36f9b8cf16e58de2483ea9985e3' - 'd50c1ac47394e9aec637002ef3392bd1') + 'd50c1ac47394e9aec637002ef3392bd1' + '28a99a419bda6d14ba6a32b090755431') _kernelname=${pkgbase#linux} @@ -54,6 +56,11 @@ prepare() { # patch from fedora patch -Np1 -i "${srcdir}/criu-no-expert.patch" + # fix critical skge ethernet driver regression with 88E8001 NIC + # patch from https://lkml.org/lkml/diff/2013/9/18/535/1 + # published by Francois Romieu at https://lkml.org/lkml/2013/9/18/535 + patch -Np1 -i "${srcdir}/skge.patch" + if [ "${CARCH}" = "x86_64" ]; then cat "${srcdir}/config.x86_64" > ./.config else diff --git a/linux/trunk/skge.patch b/linux/trunk/skge.patch new file mode 100644 index 0000000..ffbd9d7 --- /dev/null +++ b/linux/trunk/skge.patch @@ -0,0 +1,25 @@ +diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c +index ef94a59..aa85a3f 100644 +--- a/drivers/net/ethernet/marvell/skge.c ++++ b/drivers/net/ethernet/marvell/skge.c +@@ -3086,6 +3086,7 @@ static struct sk_buff *skge_rx_get(struct net_device *dev, + PCI_DMA_FROMDEVICE); + skge_rx_reuse(e, skge->rx_buf_size); + } else { ++ struct skge_element ee = *e; + struct sk_buff *nskb; + + nskb = netdev_alloc_skb_ip_align(dev, skge->rx_buf_size); +@@ -3098,10 +3099,10 @@ static struct sk_buff *skge_rx_get(struct net_device *dev, + } + + pci_unmap_single(skge->hw->pdev, +- dma_unmap_addr(e, mapaddr), +- dma_unmap_len(e, maplen), ++ dma_unmap_addr(&ee, mapaddr), ++ dma_unmap_len(&ee, maplen), + PCI_DMA_FROMDEVICE); +- skb = e->skb; ++ skb = ee.skb; + prefetch(skb->data); + }