Skip to content

Commit

Permalink
[PATCH] skge: check the allocation of ring buffer
Browse files Browse the repository at this point in the history
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 <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Stephen Hemminger authored and Jeff Garzik committed Mar 21, 2006
1 parent cfc3ed7 commit c3da144
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/net/skge.c
Original file line number Diff line number Diff line change
Expand Up @@ -727,7 +727,7 @@ static struct ethtool_ops skge_ethtool_ops = {
* 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;
Expand Down Expand Up @@ -2168,6 +2168,14 @@ static int skge_up(struct net_device *dev)
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)))
Expand Down

0 comments on commit c3da144

Please sign in to comment.