rpms/kernel/F-10 linux-2.6-iwlagn-fix-rx-skb-alignment.patch, NONE, 1.1 kernel.spec, 1.1192, 1.1193
John W. Linville
linville at fedoraproject.org
Mon Dec 15 16:00:59 UTC 2008
- Previous message (by thread): rpms/python-kerberos/devel PyKerberos-delegation.patch, 1.1, 1.2 python-kerberos.spec, 1.8, 1.9 PyKerberos-includes.patch, 1.1, NONE
- Next message (by thread): rpms/nss_compat_ossl/F-10 nss_compat_ossl-cipherlist.patch, NONE, 1.1 nss_compat_ossl.spec, 1.11, 1.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: linville
Update of /cvs/pkgs/rpms/kernel/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv30710
Modified Files:
kernel.spec
Added Files:
linux-2.6-iwlagn-fix-rx-skb-alignment.patch
Log Message:
iwlagn: fix RX skb alignment
linux-2.6-iwlagn-fix-rx-skb-alignment.patch:
--- NEW FILE linux-2.6-iwlagn-fix-rx-skb-alignment.patch ---
diff -up linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h
--- linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig 2008-12-15 10:21:27.000000000 -0500
+++ linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h 2008-12-15 10:21:31.000000000 -0500
@@ -89,7 +89,8 @@ extern struct iwl_cfg iwl5100_abg_cfg;
#define DEFAULT_LONG_RETRY_LIMIT 4U
struct iwl_rx_mem_buffer {
- dma_addr_t dma_addr;
+ dma_addr_t real_dma_addr;
+ dma_addr_t aligned_dma_addr;
struct sk_buff *skb;
struct list_head list;
};
diff -up linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c.orig linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c
--- linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c.orig 2008-12-15 10:21:27.000000000 -0500
+++ linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c 2008-12-15 10:21:31.000000000 -0500
@@ -1384,7 +1384,7 @@ void iwl_rx_handle(struct iwl_priv *priv
rxq->queue[i] = NULL;
- pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->dma_addr,
+ pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->aligned_dma_addr,
priv->hw_params.rx_buf_size,
PCI_DMA_FROMDEVICE);
pkt = (struct iwl_rx_packet *)rxb->skb->data;
@@ -1436,8 +1436,8 @@ void iwl_rx_handle(struct iwl_priv *priv
rxb->skb = NULL;
}
- pci_unmap_single(priv->pci_dev, rxb->dma_addr,
- priv->hw_params.rx_buf_size,
+ pci_unmap_single(priv->pci_dev, rxb->real_dma_addr,
+ priv->hw_params.rx_buf_size + 256,
PCI_DMA_FROMDEVICE);
spin_lock_irqsave(&rxq->lock, flags);
list_add_tail(&rxb->list, &priv->rxq.rx_used);
diff -up linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c.orig linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c
--- linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c.orig 2008-12-15 10:21:27.000000000 -0500
+++ linux-2.6.27.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c 2008-12-15 10:21:31.000000000 -0500
@@ -204,7 +204,7 @@ int iwl_rx_queue_restock(struct iwl_priv
list_del(element);
/* Point to Rx buffer via next RBD in circular buffer */
- rxq->bd[rxq->write] = iwl_dma_addr2rbd_ptr(priv, rxb->dma_addr);
+ rxq->bd[rxq->write] = iwl_dma_addr2rbd_ptr(priv, rxb->aligned_dma_addr);
rxq->queue[rxq->write] = rxb;
rxq->write = (rxq->write + 1) & RX_QUEUE_MASK;
rxq->free_count--;
@@ -251,7 +251,7 @@ void iwl_rx_allocate(struct iwl_priv *pr
rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
/* Alloc a new receive buffer */
- rxb->skb = alloc_skb(priv->hw_params.rx_buf_size,
+ rxb->skb = alloc_skb(priv->hw_params.rx_buf_size + 256,
__GFP_NOWARN | GFP_ATOMIC);
if (!rxb->skb) {
if (net_ratelimit())
@@ -266,9 +266,17 @@ void iwl_rx_allocate(struct iwl_priv *pr
list_del(element);
/* Get physical address of RB/SKB */
- rxb->dma_addr =
- pci_map_single(priv->pci_dev, rxb->skb->data,
- priv->hw_params.rx_buf_size, PCI_DMA_FROMDEVICE);
+ rxb->real_dma_addr = pci_map_single(
+ priv->pci_dev,
+ rxb->skb->data,
+ priv->hw_params.rx_buf_size + 256,
+ PCI_DMA_FROMDEVICE);
+ /* dma address must be no more than 36 bits */
+ BUG_ON(rxb->real_dma_addr & ~DMA_BIT_MASK(36));
+ /* and also 256 byte aligned! */
+ rxb->aligned_dma_addr = ALIGN(rxb->real_dma_addr, 256);
+ skb_reserve(rxb->skb, rxb->aligned_dma_addr - rxb->real_dma_addr);
+
list_add_tail(&rxb->list, &rxq->rx_free);
rxq->free_count++;
}
@@ -300,8 +308,8 @@ void iwl_rx_queue_free(struct iwl_priv *
for (i = 0; i < RX_QUEUE_SIZE + RX_FREE_BUFFERS; i++) {
if (rxq->pool[i].skb != NULL) {
pci_unmap_single(priv->pci_dev,
- rxq->pool[i].dma_addr,
- priv->hw_params.rx_buf_size,
+ rxq->pool[i].real_dma_addr,
+ priv->hw_params.rx_buf_size + 256,
PCI_DMA_FROMDEVICE);
dev_kfree_skb(rxq->pool[i].skb);
}
@@ -354,8 +362,8 @@ void iwl_rx_queue_reset(struct iwl_priv
* to an SKB, so we need to unmap and free potential storage */
if (rxq->pool[i].skb != NULL) {
pci_unmap_single(priv->pci_dev,
- rxq->pool[i].dma_addr,
- priv->hw_params.rx_buf_size,
+ rxq->pool[i].real_dma_addr,
+ priv->hw_params.rx_buf_size + 256,
PCI_DMA_FROMDEVICE);
priv->alloc_rxb_skb--;
dev_kfree_skb(rxq->pool[i].skb);
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-10/kernel.spec,v
retrieving revision 1.1192
retrieving revision 1.1193
diff -u -r1.1192 -r1.1193
--- kernel.spec 15 Dec 2008 08:27:44 -0000 1.1192
+++ kernel.spec 15 Dec 2008 16:00:29 -0000 1.1193
@@ -660,6 +660,7 @@
Patch680: linux-2.6-iwlagn-downgrade-BUG_ON-in-interrupt.patch
Patch681: linux-2.6-iwl3945-ibss-tsf-fix.patch
Patch682: linux-2.6-wireless-ath9k-dma-fixes.patch
+Patch683: linux-2.6-iwlagn-fix-rx-skb-alignment.patch
Patch690: linux-2.6-at76.patch
Patch700: linux-2.6-nfs-client-mounts-hang.patch
@@ -1272,6 +1273,9 @@
# Backported ath9k DMA fixes from pre-2.6.28
ApplyPatch linux-2.6-wireless-ath9k-dma-fixes.patch
+# iwlagn: fix RX skb alignment
+ApplyPatch linux-2.6-iwlagn-fix-rx-skb-alignment.patch
+
# Add misc wireless bits from upstream wireless tree
ApplyPatch linux-2.6-at76.patch
@@ -1929,6 +1933,9 @@
%kernel_variant_files -k vmlinux %{with_kdump} kdump
%changelog
+* Mon Dec 15 2008 John W. Linville <linville at redhat.com> 2.6.27.9-157
+- iwlagn: fix RX skb alignment
+
* Mon Dec 15 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.27.9-156
- Revert -stable patch that causes suspend problems (L-K BZ 12149, 12155)
- Previous message (by thread): rpms/python-kerberos/devel PyKerberos-delegation.patch, 1.1, 1.2 python-kerberos.spec, 1.8, 1.9 PyKerberos-includes.patch, 1.1, NONE
- Next message (by thread): rpms/nss_compat_ossl/F-10 nss_compat_ossl-cipherlist.patch, NONE, 1.1 nss_compat_ossl.spec, 1.11, 1.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list