The SysKonnect Genesis and Yukon chip sets have restrictions on the possible
control block area.  The memory needs to not cross 4 Gig boundary, and it needs
to be 8 byte aligned.  This patch checks and fails to bring the device up
if region is unacceptable.

Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]>


--- skge-2.6.orig/drivers/net/skge.c
+++ skge-2.6/drivers/net/skge.c
@@ -727,7 +727,7 @@ static struct ethtool_ops skge_ethtool_o
  * Allocate ring elements and chain them together
  * One-to-one association of board descriptors with ring elements
  */
-static int skge_ring_alloc(struct skge_ring *ring, void *vaddr, u64 base)
+static int skge_ring_alloc(struct skge_ring *ring, void *vaddr, u32 base)
 {
        struct skge_tx_desc *d;
        struct skge_element *e;
@@ -2168,6 +2168,14 @@ static int skge_up(struct net_device *de
        if (!skge->mem)
                return -ENOMEM;
 
+       BUG_ON(skge->dma & 7);
+
+       if ((u64)skge->dma >> 32 != ((u64) skge->dma + skge->mem_size) >> 32) {
+               printk(KERN_ERR PFX "pci_alloc_consistent region crosses 4G 
boundary\n");
+               err = -EINVAL;
+               goto free_pci_mem;
+       }
+
        memset(skge->mem, 0, skge->mem_size);
 
        if ((err = skge_ring_alloc(&skge->rx_ring, skge->mem, skge->dma)))

--

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to