Hello, I have tried to compile the Linux Kernel 2.6 from the "petalinux-v0.20-rc3.tar.gz" release without patches. I have some bugs during bootup. So I enabled some "Kernel hacking" options for better checking the problems. See the attached JPEG file for the selected options. If I do so the emaclite ethernet driver doesn't compile any longer due to a first wrong argument to the spin_lock_... functions. The first argument to these functions must be a pointer to a "spin_lock_t" variable. Here is a patch to correct this bug in the emaclite driver. I think the same problem is present in the full emac driver. Hans -- Dr. Johann Pfefferl ------------ mailto j.pfefferl at eubus dot net Eubus GmbH http://www.eubus.net +++++ http://www.hydraxc.com Gollierstr. 70 D-80339 Muenchen Phone: +49 (0)89 45 22 578-67 Fax: +49 (0)89 45 22 578-55 Registergericht Muenchen HRB 145 336, Ust-Id Nr. DE 225 783 933 Geschaeftsfuehrer: Volker Ulrich, Peter Sibities == -o) A computer program does what you tell it to do, /\\ not what you want it to do. _\_v-
Attachment:
kernel-hacking.jpg
Description: JPEG image
First argument to the spin_lock... functions must be a pointer
---
commit ebf733f041c02e8995de8e81b5d714bc3504b2f5
tree a7b3251e028619dbd245c562e1aba4ca9a1236a8
parent acb7bb088bf07d95de58af6b63a73691dff6c19b
author Dr. Johann Pfefferl <pfefferl@xxxxxxx> Thu, 25 Oct 2007 15:56:28 +0200
committer Dr. Johann Pfefferl <pfefferl@xxxxxxxxxxxxxxx> Thu, 25 Oct 2007 15:56:28 +0200
.../drivers/net/xilinx_emaclite/adapter.c | 22 +++++++++++-----------
1 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/software/linux-2.6.x-petalogix/drivers/net/xilinx_emaclite/adapter.c b/software/linux-2.6.x-petalogix/drivers/net/xilinx_emaclite/adapter.c
index 962ac42..192d1b9 100644
--- a/software/linux-2.6.x-petalogix/drivers/net/xilinx_emaclite/adapter.c
+++ b/software/linux-2.6.x-petalogix/drivers/net/xilinx_emaclite/adapter.c
@@ -310,12 +310,12 @@ xemaclite_close(struct net_device *dev)
free_irq(dev->irq, dev);
- spin_lock_irqsave(rcvSpin, flags);
+ spin_lock_irqsave(&rcvSpin, flags);
list_del(&(lp->rcv));
- spin_unlock_irqrestore(rcvSpin, flags);
- spin_lock_irqsave(xmitSpin, flags);
+ spin_unlock_irqrestore(&rcvSpin, flags);
+ spin_lock_irqsave(&xmitSpin, flags);
list_del(&(lp->xmit));
- spin_unlock_irqrestore(xmitSpin, flags);
+ spin_unlock_irqrestore(&xmitSpin, flags);
return 0;
}
@@ -338,14 +338,14 @@ xemaclite_Send(struct sk_buff *orig_skb, struct net_device *dev)
new_skb = orig_skb;
- spin_lock_irqsave(reset_lock, flags);
+ spin_lock_irqsave(&reset_lock, flags);
if (XEmacLite_Send(&lp->EmacLite, (u8 *) new_skb->data, len) != XST_SUCCESS) {
netif_stop_queue(dev);
lp->deferred_skb = new_skb;
- spin_unlock_irqrestore(reset_lock, flags);
+ spin_unlock_irqrestore(&reset_lock, flags);
return 0;
}
- spin_unlock_irqrestore(reset_lock, flags);
+ spin_unlock_irqrestore(&reset_lock, flags);
lp->stats.tx_bytes += len;
dev_kfree_skb(new_skb);
@@ -383,9 +383,9 @@ xemaclite_tx_timeout(struct net_device *dev)
dev->name, TX_TIMEOUT * 1000UL / HZ);
lp->stats.tx_errors++;
- spin_lock_irqsave(reset_lock, flags);
+ spin_lock_irqsave(&reset_lock, flags);
reset(dev, UNKNOWN_DUPLEX);
- spin_unlock_irqrestore(reset_lock, flags);
+ spin_unlock_irqrestore(&reset_lock, flags);
}
/* The callback function for frames received. */
@@ -425,9 +425,9 @@ RecvHandler(void *CallbackRef)
lp->stats.rx_errors++;
dev_kfree_skb(skb);
//printk(KERN_ERR "%s: Could not receive buffer\n",dev->name);
- spin_lock(reset_lock);
+ spin_lock(&reset_lock);
//reset(dev, UNKNOWN_DUPLEX);
- spin_unlock(reset_lock);
+ spin_unlock(&reset_lock);
return;
}