* Re: [patch] 9p: fix min_t() casting
From: Dan Carpenter @ 2011-01-16 11:45 UTC (permalink / raw)
To: David Miller
Cc: ericvh, sripathik, jvrao, aneesh.kumar, netdev, kernel-janitors,
mohan
In-Reply-To: <20110115.205208.104051310.davem@davemloft.net>
On Sat, Jan 15, 2011 at 08:52:08PM -0800, David Miller wrote:
> From: Dan Carpenter <error27@gmail.com>
> Date: Sat, 15 Jan 2011 23:35:39 +0300
>
> > The intent here was to cap the length to USHRT_MAX, but what the
> > code actually does is it just casts the return from strlen() to
> > unsigned short and truncates the significant bits away.
> >
> > Signed-off-by: Dan Carpenter <error27@gmail.com>
>
> If you want me to apply this, it doesn't apply cleanly to net-2.6
> at all.
Sorry. I screwed up.
This was on top of a patch from M. Mohan Kumar <mohan@in.ibm.com>
that hasn't hit net-2.6 yet. Mohan wasn't included on the CC
list because get_maintainer.pl changed and I didn't notice and
I wasn't careful.
Eric, could Mohan just fix his patch before it gets merged or is it
better to send these as two patches?
regards,
dan carpenter
Ps: Mohon the patch is here:
http://marc.info/?l=linux-netdev&m=129512381528034&w=2
^ permalink raw reply
* Re: [PATCH]netdev: add driver for enc424j600 ethernet chip on SPI bus
From: Balaji Venkatachalam @ 2011-01-16 10:51 UTC (permalink / raw)
To: netdev
Cc: Michał Mirosław, mohan, blue.cube, lanconelli.claudio,
Sriram Subramanian
In-Reply-To: <AANLkTi=WQ-o+D0NicpGBd_qcfivLYaix_CUGWi2Rd_Zv@mail.gmail.com>
From: Balaji Venkatachalam <balaji.v@thotakaa.com>
Here is the updated patch for Microchip enc424j600 ethernet chip
controlled via SPI.
I tested it on my custom board with ARM9 (Freescale i.MX233) with
Kernel 2.6.31.14.
Changes done since V1.24 to V1.27
1. Timeout Mechanism implemented for enc424j600_soft_reset function
2. Timeout Mechanism implemented for enc424j600_wait_for_autoneg function
3. Window Naming changed to enum
4. Removed WRITEVERIFY functionality
Todo List:
1. Low Power Mode Functionality implementation
2. Provide Support for On-Chip DMA.
3. Remove mutex_lock wherever not required
Any comments are welcome.
Signed-off-by: Balaji Venkatachalam <balaji.v@thotakaa.com>
---
diff -uprN -X a/Documentation/dontdiff a/drivers/net/enc424j600.c
b/drivers/net/enc424j600.c
--- a/drivers/net/enc424j600.c 1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/enc424j600.c 2011-01-16 16:15:33.000000000 +0530
@@ -0,0 +1,1710 @@
+/*
+ * Microchip ENC424J600 ethernet driver (MAC + PHY) on SPI bus
+ *
+ * Copyright (C) 2011 Thotaka Technologies Pvt Ltd
+ * Author: Balaji Venkatachalam <balaji.v@thotakaa.com>
+ * based on enc424j600.c written by Kuba Marek
+ * based on enc28j60.c written by Claudio Lanconelli
+ *
+ * Changes done since V1.24 to V1.27
+ * 1. Timeout Mechanism implemented for enc424j600_soft_reset function
+ * 2. Timeout Mechanism implemented for enc424j600_wait_for_autoneg function
+ * 3. Window Naming changed to enum
+ * 4. Removed WRITEVERIFY functionality
+ *
+ * Todo List:
+ * 1. Low Power Mode Functionality implementation
+ * 2. Provide Support for On-Chip DMA
+ * 3. Remove mutex_lock wherever not required
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/fcntl.h>
+#include <linux/interrupt.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/ethtool.h>
+#include <linux/tcp.h>
+#include <linux/skbuff.h>
+#include <linux/delay.h>
+#include <linux/spi/spi.h>
+
+#include "enc424j600_hw.h"
+
+#define DRV_NAME "enc424j600"
+#define DRV_VERSION "1.27"
+
+#define ENC424J600_MSG_DEFAULT \
+ (NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN | NETIF_MSG_LINK)
+
+#define SPI_TRANSFER_BUF_LEN (4 + MAX_FRAMELEN)
+#define TX_TIMEOUT (4 * HZ)
+
+/* Max TX retries in case of collision as suggested by errata datasheet */
+#define MAX_TX_RETRYCOUNT 16
+
+#define SPI_OPLEN 1
+
+#define SRAMSIZE 0x6000
+#define TXSTART 0x0000
+#define RXSTART 0x1600
+
+static int enc424j600_enable_dma; /* Enable SPI DMA. Default: 0 (Off) */
+
+enum {
+ RXFILTER_NORMAL,
+ RXFILTER_MULTI,
+ RXFILTER_PROMISC
+};
+enum {
+ RXWINDOW,
+ USERWINDOW,
+ GPWINDOW
+};
+
+/* Driver local data */
+struct enc424j600_net {
+ struct net_device *netdev;
+ struct spi_device *spi;
+ struct mutex lock;
+ struct sk_buff *tx_skb;
+ struct work_struct tx_work;
+ struct work_struct irq_work;
+ struct work_struct setrx_work;
+ struct work_struct restart_work;
+ u8 bank; /* current register bank selected */
+ u16 next_pk_ptr; /* next packet pointer within FIFO */
+ u16 max_pk_counter; /* statistics: max packet counter */
+ u16 tx_retry_count;
+ bool hw_enable;
+ bool full_duplex;
+ bool autoneg;
+ bool speed100;
+ int rxfilter;
+ u32 msg_enable;
+
+ u8 *spi_rx_buf;
+ u8 *spi_tx_buf;
+ dma_addr_t spi_tx_dma;
+ dma_addr_t spi_rx_dma;
+};
+
+/* use ethtool to change the level for any given device */
+static struct {
+ u32 msg_enable;
+} debug = {
+-1};
+
+static int enc424j600_spi_trans(struct enc424j600_net *priv, int len)
+{
+ /*modified to suit half duplexed spi */
+ struct spi_transfer tt = {
+ .tx_buf = priv->spi_tx_buf,
+ .len = SPI_OPLEN,
+ };
+ struct spi_transfer tr = {
+ .rx_buf = priv->spi_rx_buf,
+ .len = len,
+ };
+ struct spi_message m;
+ int ret;
+
+ spi_message_init(&m);
+
+ spi_message_add_tail(&tt, &m);
+ spi_message_add_tail(&tr, &m);
+
+ ret = spi_sync(priv->spi, &m);
+
+ if (ret == 0)
+ memcpy(priv->spi_rx_buf, tr.rx_buf, len);
+
+ if (ret)
+ dev_err(&priv->spi->dev,
+ "spi transfer failed: ret = %d\n", ret);
+ return ret;
+}
+
+/*
+ * Read data from chip SRAM.
+ * window = 0 for Receive Buffer
+ * = 1 for User Defined area
+ * = 2 for General Purpose area
+ */
+static int enc424j600_read_sram(struct enc424j600_net *priv,
+ u8 *dst, int len, u16 srcaddr, int window)
+{
+ int ret;
+
+ if (len > SPI_TRANSFER_BUF_LEN - 1 || len <= 0)
+ return -EINVAL;
+
+ /* First set the write pointer as per selected window */
+ if (window == RXWINDOW)
+ priv->spi_tx_buf[0] = WRXRDPT;
+ else if (window == USERWINDOW)
+ priv->spi_tx_buf[0] = WUDARDPT;
+ else if (window == GPWINDOW)
+ priv->spi_tx_buf[0] = WGPRDPT;
+
+ priv->spi_tx_buf[1] = srcaddr & 0xFF;
+ priv->spi_tx_buf[2] = srcaddr >> 8;
+ ret = spi_write(priv->spi, priv->spi_tx_buf, 3);
+
+ /* Transfer the data */
+ if (window == RXWINDOW)
+ priv->spi_tx_buf[0] = RRXDATA;
+ else if (window == USERWINDOW)
+ priv->spi_tx_buf[0] = RUDADATA;
+ else if (window == GPWINDOW)
+ priv->spi_tx_buf[0] = RGPDATA;
+
+ ret = enc424j600_spi_trans(priv, len + 1);
+ /*READ*/
+ /* Copy the data from the rx buffer */
+ memcpy(dst, &priv->spi_rx_buf[0], len);
+
+ return ret;
+}
+
+/*
+ * Write data to chip SRAM.
+ * window = 1 for RX
+ * window = 2 for User Data
+ * window = 3 for GP
+ */
+static int enc424j600_write_sram(struct enc424j600_net *priv,
+ const u8 *src, int len, u16 dstaddr,
+ int window)
+{
+ int ret;
+
+ if (len > SPI_TRANSFER_BUF_LEN - 1 || len <= 0)
+ return -EINVAL;
+
+ /* First set the general purpose write pointer */
+ if (window == RXWINDOW)
+ priv->spi_tx_buf[0] = WRXWRPT;
+ else if (window == USERWINDOW)
+ priv->spi_tx_buf[0] = WUDAWRPT;
+ else if (window == GPWINDOW)
+ priv->spi_tx_buf[0] = WGPWRPT;
+
+ priv->spi_tx_buf[1] = dstaddr & 0xFF;
+ priv->spi_tx_buf[2] = dstaddr >> 8;
+ ret = spi_write(priv->spi, priv->spi_tx_buf, 3);
+
+ /* Copy the data to the tx buffer */
+ memcpy(&priv->spi_tx_buf[1], src, len);
+
+ /* Transfer the data */
+ if (window == RXWINDOW)
+ priv->spi_tx_buf[0] = WRXDATA;
+ else if (window == USERWINDOW)
+ priv->spi_tx_buf[0] = WUDADATA;
+ else if (window == GPWINDOW)
+ priv->spi_tx_buf[0] = WGPDATA;
+
+ ret = spi_write(priv->spi, priv->spi_tx_buf, len + 1);
+
+ return ret;
+}
+
+/*
+ * Select the current register bank if necessary to be able to read @addr.
+ */
+static void enc424j600_set_bank(struct enc424j600_net *priv, u8 addr)
+{
+ u8 b = (addr & BANK_MASK) >> BANK_SHIFT;
+
+ /* These registers are present in all banks, no need to switch bank */
+ if (addr >= EUDASTL && addr <= ECON1H)
+ return;
+ if (priv->bank == b)
+ return;
+
+ priv->spi_tx_buf[0] = BXSEL(b);
+
+ enc424j600_spi_trans(priv, 1);
+ /*WRITE*/ priv->bank = b;
+}
+
+/*
+ * Set bits in an 8bit SFR.
+ */
+static void enc424j600_set_bits(struct enc424j600_net *priv, u8 addr, u8 mask)
+{
+ enc424j600_set_bank(priv, addr);
+ priv->spi_tx_buf[0] = BFS(addr);
+ priv->spi_tx_buf[1] = mask;
+ spi_write(priv->spi, priv->spi_tx_buf, 2);
+}
+
+/*
+ * Clear bits in an 8bit SFR.
+ */
+static void enc424j600_clear_bits(struct enc424j600_net *priv, u8
addr, u8 mask)
+{
+ enc424j600_set_bank(priv, addr);
+ priv->spi_tx_buf[0] = BFC(addr);
+ priv->spi_tx_buf[1] = mask;
+ spi_write(priv->spi, priv->spi_tx_buf, 2);
+}
+
+/*
+ * Write a 8bit special function register.
+ * The @sfr parameters takes address of the register.
+ * Uses banked write instruction.
+ */
+static int enc424j600_write_8b_sfr(struct enc424j600_net *priv, u8
sfr, u8 data)
+{
+ int ret;
+ enc424j600_set_bank(priv, sfr);
+
+ priv->spi_tx_buf[0] = WCR(sfr & ADDR_MASK);
+ priv->spi_tx_buf[1] = data & 0xFF;
+ ret = spi_write(priv->spi, priv->spi_tx_buf, 2);
+
+ return ret;
+}
+
+/*
+ * Read a 8bit special function register.
+ * The @sfr parameters takes address of the register.
+ * Uses banked read instruction.
+ */
+static int enc424j600_read_8b_sfr(struct enc424j600_net *priv,
+ u8 sfr, u8 *data)
+{
+ int ret;
+
+ enc424j600_set_bank(priv, sfr);
+ priv->spi_tx_buf[0] = RCR(sfr & ADDR_MASK);
+ ret = enc424j600_spi_trans(priv, 2);
+ /*READ*/ *data = priv->spi_rx_buf[0];
+
+ return ret;
+}
+
+/*
+ * Write a 16bit special function register.
+ * The @sfr parameters takes address of the low byte of the register.
+ * Takes care of the endiannes & buffers.
+ * Uses banked write instruction.
+ */
+
+static int enc424j600_write_16b_sfr(struct enc424j600_net *priv,
+ u8 sfr, u16 data)
+{
+ int ret;
+ enc424j600_set_bank(priv, sfr);
+
+ priv->spi_tx_buf[0] = WCR(sfr & ADDR_MASK);
+ priv->spi_tx_buf[1] = data & 0xFF;
+ priv->spi_tx_buf[2] = data >> 8;
+ ret = spi_write(priv->spi, priv->spi_tx_buf, 3);
+ if (ret && netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() failed: ret = %d\n",
+ __func__, ret);
+
+ return ret;
+}
+
+/*
+ * Read a 16bit special function register.
+ * The @sfr parameters takes address of the low byte of the register.
+ * Takes care of the endiannes & buffers.
+ * Uses banked read instruction.
+ */
+static int enc424j600_read_16b_sfr(struct enc424j600_net *priv,
+ u8 sfr, u16 *data)
+{
+ int ret;
+ enc424j600_set_bank(priv, sfr);
+
+ priv->spi_tx_buf[0] = RCR(sfr & ADDR_MASK);
+ priv->spi_tx_buf[1] = 0;
+ priv->spi_tx_buf[2] = 0;
+ priv->spi_tx_buf[3] = 0;
+ ret = enc424j600_spi_trans(priv, 3);
+ /*READ*/ *data = priv->spi_rx_buf[0] | priv->spi_rx_buf[1] << (u16) 8;
+
+ return ret;
+}
+
+static unsigned long msec20_to_jiffies;
+
+/*
+ * Wait for bits in register to become equal to @readyMask, but at most 20ms.
+ */
+static int checktimeout_16bit(struct enc424j600_net *priv,
+ u8 reg, u16 mask, u16 readyMask)
+{
+ unsigned long timeout = jiffies + msec20_to_jiffies;
+ u16 value;
+ /* 20 msec timeout read */
+ enc424j600_read_16b_sfr(priv, reg, &value);
+ while ((value & mask) != readyMask) {
+ if (time_after(jiffies, timeout)) {
+ if (netif_msg_drv(priv))
+ dev_dbg(&priv->spi->dev,
+ "reg %02x ready timeout!\n", reg);
+ return -ETIMEDOUT;
+ }
+ cpu_relax();
+ enc424j600_read_16b_sfr(priv, reg, &value);
+ }
+
+ return 0;
+}
+
+static int checktimeout_8bit(struct enc424j600_net *priv,
+ u8 reg, u8 mask, u8 readyMask)
+{
+ unsigned long timeout = jiffies + msec20_to_jiffies;
+ u8 value;
+ /* 20 msec timeout read */
+ enc424j600_read_8b_sfr(priv, reg, &value);
+ while ((value & mask) != readyMask) {
+ if (time_after(jiffies, timeout)) {
+ if (netif_msg_drv(priv))
+ dev_dbg(&priv->spi->dev,
+ "reg %02x ready timeout!\n", reg);
+ return -ETIMEDOUT;
+ }
+ cpu_relax();
+ enc424j600_read_8b_sfr(priv, reg, &value);
+ }
+
+ return 0;
+}
+
+/*
+ * Reset the enc424j600.
+ */
+static int enc424j600_soft_reset(struct enc424j600_net *priv)
+{
+ int ret;
+ u16 eudast;
+ if (netif_msg_hw(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() enter\n", __func__);
+
+ enc424j600_write_16b_sfr(priv, EUDASTL, EUDAST_TEST_VAL);
+ ret = checktimeout_16bit(priv, EUDASTL, 0xFFFF, EUDAST_TEST_VAL);
+ if (ret != 0)
+ return ret;
+ ret = checktimeout_16bit(priv, ESTATH, CLKRDY, CLKRDY);
+ if (ret != 0)
+ return ret;
+
+ priv->spi_tx_buf[0] = SETETHRST;
+ enc424j600_spi_trans(priv, 1);
+ /*inline with the datasheet */
+ udelay(25);
+
+ enc424j600_read_16b_sfr(priv, EUDASTL, &eudast);
+ if (netif_msg_hw(priv) && eudast != 0)
+ printk(KERN_DEBUG DRV_NAME
+ ": %s() EUDASTL is not zero!\n", __func__);
+ /*inline with the datasheet */
+ /*datasheet says to wait for 256 usec atleast */
+ udelay(300);
+ return 0;
+}
+
+/*
+ * PHY register read
+ * PHY registers are not accessed directly, but through the MII
+ */
+static int enc424j600_phy_read(struct enc424j600_net *priv,
+ u16 address, u16 *data)
+{
+ int ret;
+
+ enc424j600_write_16b_sfr(priv, MIREGADRL,
+ address | (MIREGADRH_VAL << 8));
+ enc424j600_write_16b_sfr(priv, MICMDL, MIIRD);
+ udelay(26);
+ ret = !checktimeout_8bit(priv, MISTATL, BUSY, 0);
+ enc424j600_write_16b_sfr(priv, MICMDL, 0);
+ enc424j600_read_16b_sfr(priv, MIRDL, data);
+ return ret;
+}
+
+static int enc424j600_phy_write(struct enc424j600_net *priv, u16 address,
+ u16 data)
+{
+ enc424j600_write_16b_sfr(priv, MIREGADRL,
+ address | (MIREGADRH_VAL << 8));
+ enc424j600_write_16b_sfr(priv, MIWRL, data);
+ udelay(26);
+ return !checktimeout_8bit(priv, MISTATL, BUSY, 0);
+}
+
+/*
+ * Read the hardware MAC address to dev->dev_addr.
+ */
+static int enc424j600_get_hw_macaddr(struct net_device *ndev)
+{
+ struct enc424j600_net *priv = netdev_priv(ndev);
+ u16 maadr1, maadr2, maadr3;
+
+ mutex_lock(&priv->lock);
+
+ if (netif_msg_drv(priv))
+ printk(KERN_INFO DRV_NAME
+ ": %s: Setting MAC address to %pM\n",
+ ndev->name, ndev->dev_addr);
+
+ enc424j600_read_16b_sfr(priv, MAADR3L, &maadr3);
+ ndev->dev_addr[5] = maadr3 >> 8;
+ ndev->dev_addr[4] = maadr3 & 0xff;
+ enc424j600_read_16b_sfr(priv, MAADR2L, &maadr2);
+ ndev->dev_addr[3] = maadr2 >> 8;
+ ndev->dev_addr[2] = maadr2 & 0xff;
+ enc424j600_read_16b_sfr(priv, MAADR1L, &maadr1);
+ ndev->dev_addr[1] = maadr1 >> 8;
+ ndev->dev_addr[0] = maadr1 & 0xff;
+
+ mutex_unlock(&priv->lock);
+
+ return 0;
+}
+
+/*
+ * Program the hardware MAC address from dev->dev_addr.
+ */
+static int enc424j600_set_hw_macaddr(struct net_device *ndev)
+{
+ struct enc424j600_net *priv = netdev_priv(ndev);
+
+ mutex_lock(&priv->lock);
+
+ if (priv->hw_enable) {
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME
+ ": %s() Hardware must be disabled to set "
+ "Mac address\n", __func__);
+ mutex_unlock(&priv->lock);
+ return -EBUSY;
+ }
+
+ if (netif_msg_drv(priv))
+ printk(KERN_INFO DRV_NAME
+ ": %s: Setting MAC address to %pM\n",
+ ndev->name, ndev->dev_addr);
+
+ enc424j600_write_16b_sfr(priv, MAADR3L,
+ ndev->dev_addr[4] | ndev->dev_addr[5] << 8);
+ enc424j600_write_16b_sfr(priv, MAADR2L,
+ ndev->dev_addr[2] | ndev->dev_addr[3] << 8);
+ enc424j600_write_16b_sfr(priv, MAADR1L,
+ ndev->dev_addr[0] | ndev->dev_addr[1] << 8);
+
+ mutex_unlock(&priv->lock);
+
+ return 0;
+}
+
+/*
+ * Store the new hardware address in dev->dev_addr, and update the MAC.
+ */
+static int enc424j600_set_mac_address(struct net_device *dev, void *addr)
+{
+ struct sockaddr *address = addr;
+
+ if (netif_running(dev))
+ return -EBUSY;
+ if (!is_valid_ether_addr(address->sa_data))
+ return -EADDRNOTAVAIL;
+
+ memcpy(dev->dev_addr, address->sa_data, dev->addr_len);
+ return enc424j600_set_hw_macaddr(dev);
+}
+
+u8 nolock_regb_read(struct enc424j600_net *priv, u8 address)
+{
+ u8 data;
+ enc424j600_read_8b_sfr(priv, address, &data);
+ return data;
+}
+
+u16 nolock_regw_read(struct enc424j600_net *priv, u8 address)
+{
+ u16 data;
+ enc424j600_read_16b_sfr(priv, address, &data);
+ return data;
+}
+
+/*Debug routine to dump useful register contents*/
+static void enc424j600_dump_regs(struct enc424j600_net *priv, const char *msg)
+{
+
+ mutex_lock(&priv->lock);
+ printk(KERN_DEBUG DRV_NAME " %s\n"
+ "Cntrl: ECON1H ECON1L ECON2H ECON2L ESTATH ESTATL EIRH "
+ "EIRL EIEH EIEL\n"
+ " 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x "
+ "0x%02x 0x%02x 0x%02x 0x%02x\n"
+ "MAC : MACON1 MACON2\n"
+ " 0x%04x 0x%04x\n"
+ "Rx : ERXST ERXTAIL ERXHEAD ERXWRPT ERXRDPT ERXFCON MAMXFL\n"
+ " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n"
+ "Tx : ETXST ETXLEN MACLCON1 \n"
+ " 0x%04x 0x%04x 0x%02x\n",
+ msg,
+ nolock_regb_read(priv, ECON1H), nolock_regb_read(priv, ECON1L),
+ nolock_regb_read(priv, ECON2H), nolock_regb_read(priv, ECON2L),
+ nolock_regb_read(priv, ESTATH), nolock_regb_read(priv, ESTATL),
+ nolock_regb_read(priv, EIRH), nolock_regb_read(priv, EIRL),
+ nolock_regb_read(priv, EIEH), nolock_regb_read(priv, EIEL),
+ nolock_regw_read(priv, MACON1L), nolock_regw_read(priv, MACON2L),
+ nolock_regw_read(priv, ERXSTL), nolock_regw_read(priv, ERXTAILL),
+ nolock_regw_read(priv, ERXHEADL),
+ nolock_regw_read(priv, ERXWRPTL), nolock_regw_read(priv,
+ ERXRDPTL),
+ nolock_regw_read(priv, ERXFCONL), nolock_regw_read(priv,
+ MAMXFLL),
+ nolock_regw_read(priv, ETXSTL), nolock_regw_read(priv, ETXLENL),
+ nolock_regw_read(priv, MACLCONL));
+ mutex_unlock(&priv->lock);
+}
+
+/*
+ * TODO: Check the functionality
+ * Low power mode shrinks power consumption about 100x, so we'd like
+ * the chip to be in that mode whenever it's inactive. (However, we
+ * can't stay in lowpower mode during suspend with WOL active.)
+ */
+static void enc424j600_lowpower(struct enc424j600_net *priv, bool is_low)
+{
+
+ if (netif_msg_drv(priv))
+ dev_dbg(&priv->spi->dev, "%s power...\n",
+ is_low ? "low" : "high");
+
+#if 0
+ mutex_lock(&priv->lock);
+ if (is_low) {
+ nolock_reg_bfclr(priv, ECON1, ECON1_RXEN);
+ checktimeout_8bit(priv, ESTAT, ESTAT_RXBUSY, 0);
+ checktimeout_8bit(priv, ECON1, ECON1_TXRTS, 0);
+ /* ECON2_VRPS was set during initialization */
+ nolock_reg_bfset(priv, ECON2, ECON2_PWRSV);
+ } else {
+ nolock_reg_bfclr(priv, ECON2, ECON2_PWRSV);
+ checktimeout_8bit(priv, ESTAT, ESTAT_CLKRDY, ESTAT_CLKRDY);
+ /* caller sets ECON1_RXEN */
+ }
+ mutex_unlock(&priv->lock);
+#endif
+}
+
+static unsigned long msec2000_to_jiffies;
+/* Waits for autonegotiation to complete. */
+static int enc424j600_wait_for_autoneg(struct enc424j600_net *priv)
+{
+ unsigned long timeout = jiffies + msec2000_to_jiffies;
+ u16 value;
+ /* 20 msec timeout read */
+ enc424j600_phy_read(priv, PHSTAT1, &value);
+ while ((value & ANDONE) == 0) {
+ if (time_after(jiffies, timeout)) {
+ if (netif_msg_drv(priv))
+ dev_dbg(&priv->spi->dev,
+ "reg %02x ready timeout!\n", PHSTAT1);
+ return -ETIMEDOUT;
+ }
+ cpu_relax();
+ enc424j600_phy_read(priv, PHSTAT1, &value);
+ }
+ return 0;
+
+}
+
+/*
+ * Reset and initialize the chip, but don't enable interrupts and don't
+ * start receiving yet.
+ */
+static int enc424j600_hw_init(struct enc424j600_net *priv)
+{
+ u8 eidledl;
+ u16 phcon1;
+ u16 macon2;
+ u16 econ1l;
+ /*priv->autoneg = AUTONEG_ENABLE;*/
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() - %s\n", __func__,
+ priv->
+ autoneg ? "Autoneg" : (priv->full_duplex ? "FullDuplex" :
+ "HalfDuplex"));
+
+ mutex_lock(&priv->lock);
+
+ priv->bank = 0;
+ priv->hw_enable = false;
+ priv->tx_retry_count = 0;
+ priv->max_pk_counter = 0;
+ priv->rxfilter = RXFILTER_NORMAL;
+
+ if (enc424j600_soft_reset(priv) != 0)
+ return 0;
+
+ /*
+ * Check the device id and silicon revision id.
+ */
+ enc424j600_read_8b_sfr(priv, EIDLEDL, &eidledl);
+
+ if ((eidledl & DEVID_MASK) >> DEVID_SHIFT != ENC424J600_DEV_ID) {
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME
+ ": %s() Invalid device ID: %d\n", __func__,
+ (eidledl & DEVID_MASK) >> DEVID_SHIFT);
+ return 0;
+ }
+
+ if (netif_msg_drv(priv))
+ printk(KERN_INFO DRV_NAME ": Silicon revision ID: 0x%02x\n",
+ (eidledl & REVID_MASK) >> REVID_SHIFT);
+
+ enc424j600_write_16b_sfr(priv, ETXSTL, TXSTART);
+ enc424j600_write_16b_sfr(priv, ERXSTL, RXSTART);
+
+ priv->next_pk_ptr = RXSTART;
+ enc424j600_write_16b_sfr(priv, ERXTAILL, SRAMSIZE - 2);
+ enc424j600_write_16b_sfr(priv, ERXFCONL, UCEN | BCEN | CRCEN | RUNTEN);
+
+ enc424j600_phy_write(priv, PHANA, PHANA_DEFAULT);
+
+ /* PHCON1 */
+ phcon1 = 0;
+ if (priv->autoneg) {
+ /* Enable autonegotiation and renegotiate */
+ phcon1 |= ANEN | RENEG;
+ } else {
+ if (priv->speed100)
+ phcon1 |= SPD100;
+ if (priv->full_duplex)
+ phcon1 |= PFULDPX;
+ }
+ enc424j600_phy_write(priv, PHCON1, phcon1);
+
+ /* MACON2
+ * defer transmission if collision occurs (only for half duplex)
+ * pad to 60 or 64 bytes and append CRC
+ * enable receiving huge frames (instead of limiting packet size) */
+ macon2 = MACON2_DEFER | PADCFG2 | PADCFG0 | TXCRCEN | HFRMEN;
+
+ /* If autonegotiation is enabled, we have to wait untill it finishes
+ * and set the PHYDPX bit in MACON2 correctly */
+ if (priv->autoneg) {
+ u8 estath;
+ if (!enc424j600_wait_for_autoneg(priv)) {
+ /* read the PHYDPX bit in ESTAT and set FULDPX in
+ MACON2 accordingly */
+ enc424j600_read_8b_sfr(priv, ESTATH, &estath);
+ if (estath & PHYDPX)
+ macon2 |= FULDPX;
+ } else /*if timedout, just disable autoneg */
+ priv->autoneg = AUTONEG_DISABLE;
+ } else if (priv->full_duplex)
+ macon2 |= FULDPX;
+
+ enc424j600_write_16b_sfr(priv, MACON2L, macon2);
+
+ /* MAIPGL
+ * Recomended values for inter packet gaps */
+ if (!priv->autoneg) {
+ enc424j600_write_16b_sfr(priv, MAIPGL,
+ MAIPGL_VAL | (MAIPGH_VAL << 8));
+ }
+
+ /*
+ * Select enabled interrupts, but don't set the global
+ * interrupt enable flag.
+ */
+
+ enc424j600_write_16b_sfr(priv, EIEL,
+ LINKIE << 8 | PKTIE | DMAIE | TXIE | TXABTIE |
+ RXABTIE);
+
+ enc424j600_read_16b_sfr(priv, ECON1L, &econ1l);
+ econ1l |= (RXEN);
+ enc424j600_write_16b_sfr(priv, ECON1L, econ1l);
+
+ mutex_unlock(&priv->lock);
+
+ if (netif_msg_hw(priv))
+ enc424j600_dump_regs(priv, "Hw initialized.");
+
+ return 1;
+}
+
+static void enc424j600_hw_enable(struct enc424j600_net *priv)
+{
+ if (netif_msg_hw(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() enabling interrupts.\n",
+ __func__);
+
+ mutex_lock(&priv->lock);
+
+ /* Clear any pending interrupts */
+ enc424j600_write_16b_sfr(priv, EIRL, 0);
+
+ /* Enable global interrupt flag */
+ enc424j600_set_bits(priv, EIEH, INTIE);
+
+ /* enable receive logic */
+ enc424j600_set_bits(priv, ECON1L, RXEN);
+ priv->hw_enable = true;
+ mutex_unlock(&priv->lock);
+}
+
+static void enc424j600_hw_disable(struct enc424j600_net *priv)
+{
+ if (netif_msg_hw(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() disabling interrupts.\n",
+ __func__);
+
+ mutex_lock(&priv->lock);
+
+ /* disable receive logic */
+ enc424j600_clear_bits(priv, ECON1L, RXEN);
+
+ /* Disable global interrupt flag */
+ enc424j600_clear_bits(priv, EIEH, INTIE);
+
+ priv->hw_enable = false;
+
+ mutex_unlock(&priv->lock);
+}
+
+static int
+enc424j600_setlink(struct net_device *ndev, u8 autoneg, u16 speed, u8 duplex)
+{
+ struct enc424j600_net *priv = netdev_priv(ndev);
+ int ret = 0;
+ if (!priv->hw_enable) {
+ /* link is in low power mode now; duplex setting
+ * will take effect on next enc424j600_hw_init().
+ */
+ if (speed == SPEED_10 || speed == SPEED_100) {
+ priv->autoneg = (autoneg == AUTONEG_ENABLE);
+ priv->full_duplex = (duplex == DUPLEX_FULL);
+ priv->speed100 = (speed == SPEED_100);
+ } else {
+ if (netif_msg_link(priv))
+ dev_warn(&ndev->dev,
+ "unsupported link setting\n");
+ /*speeds other than SPEED_10 and SPEED_100 */
+ /*are not supported by chip */
+ ret = -EOPNOTSUPP;
+ }
+ } else {
+ if (netif_msg_link(priv))
+ dev_warn(&ndev->dev, "Warning: hw must be disabled "
+ "to set link mode\n");
+ ret = -EBUSY;
+ }
+ return ret;
+}
+
+/*
+ * Receive Status vector
+ */
+static void enc424j600_dump_rsv(struct enc424j600_net *priv, const char *msg,
+ u16 pk_ptr, int len, u16 sts)
+{
+ printk(KERN_DEBUG DRV_NAME ": %s - NextPk: 0x%04x - RSV:\n",
+ msg, pk_ptr);
+ printk(KERN_DEBUG DRV_NAME ": ByteCount: %d, DribbleNibble: %d\n", len,
+ RSV_GETBIT(sts, RSV_DRIBBLENIBBLE));
+ printk(KERN_DEBUG DRV_NAME ": RxOK: %d, CRCErr:%d, LenChkErr: %d,"
+ " LenOutOfRange: %d\n", RSV_GETBIT(sts, RSV_RXOK),
+ RSV_GETBIT(sts, RSV_CRCERROR),
+ RSV_GETBIT(sts, RSV_LENCHECKERR),
+ RSV_GETBIT(sts, RSV_LENOUTOFRANGE));
+ printk(KERN_DEBUG DRV_NAME ": Multicast: %d, Broadcast: %d, "
+ "LongDropEvent: %d, CarrierEvent: %d\n",
+ RSV_GETBIT(sts, RSV_RXMULTICAST),
+ RSV_GETBIT(sts, RSV_RXBROADCAST),
+ RSV_GETBIT(sts, RSV_RXLONGEVDROPEV),
+ RSV_GETBIT(sts, RSV_CARRIEREV));
+ printk(KERN_DEBUG DRV_NAME ": ControlFrame: %d, PauseFrame: %d,"
+ " UnknownOp: %d, VLanTagFrame: %d\n",
+ RSV_GETBIT(sts, RSV_RXCONTROLFRAME),
+ RSV_GETBIT(sts, RSV_RXPAUSEFRAME),
+ RSV_GETBIT(sts, RSV_RXUNKNOWNOPCODE),
+ RSV_GETBIT(sts, RSV_RXTYPEVLAN));
+}
+
+static void dump_packet(const char *msg, int len, const char *data)
+{
+
+ printk(KERN_ALERT ": %s - packet len:%d\n", msg, len);
+ print_hex_dump(KERN_ALERT, "pk data: ", DUMP_PREFIX_OFFSET, 16, 1,
+ data, len, true);
+}
+
+/*
+ * Calculate wrap around when reading beyond the end of the RX buffer
+ */
+static u16 rx_packet_start(u16 ptr)
+{
+ if (ptr + RSV_SIZE > RXEND_INIT)
+ return (ptr + RSV_SIZE) - (RXEND_INIT - RXSTART + 1);
+ else
+ return ptr + RSV_SIZE;
+}
+
+/*
+ * ERXRDPT need to be set always at odd addresses, refer to errata datasheet
+ */
+static u16 erxrdpt_workaround(u16 next_packet_ptr, u16 start, u16 end)
+{
+ u16 erxrdpt;
+ if ((next_packet_ptr - 1 < start) || (next_packet_ptr - 1 > end))
+ erxrdpt = end;
+ else
+ erxrdpt = next_packet_ptr - 1;
+
+ return erxrdpt;
+}
+
+static void nolock_rxfifo_init(struct enc424j600_net *priv, u16 start, u16 end)
+{
+ u16 erxrdpt;
+ if (start > 0x5FFF || end > 0x5FFF || start > end) {
+ if (netif_msg_drv(priv))
+ printk(KERN_ERR DRV_NAME ": %s(%d, %d) RXFIFO "
+ "bad parameters!\n", __func__, start, end);
+ return;
+ }
+ /* set receive buffer start + end */
+ priv->next_pk_ptr = start;
+ enc424j600_write_16b_sfr(priv, ERXSTL, start);
+ erxrdpt = erxrdpt_workaround(priv->next_pk_ptr, start, end);
+ enc424j600_write_16b_sfr(priv, ERXRDPTL, erxrdpt);
+ enc424j600_write_16b_sfr(priv, ERXTAILL, end);
+}
+
+/*
+ * Hardware receive function.
+ * Read the buffer memory, update the FIFO pointer to free the buffer,
+ * check the status vector and decrement the packet counter.
+ */
+static void enc424j600_hw_rx(struct net_device *ndev)
+{
+ struct enc424j600_net *priv = netdev_priv(ndev);
+ struct sk_buff *skb = NULL;
+ u16 erxrdpt, next_packet, rxstat;
+ u8 pkcnt;
+ u16 head, tail;
+ u8 rsv[RSV_SIZE];
+ u16 newrxtail;
+ int len;
+
+ if (netif_msg_rx_status(priv))
+ printk(KERN_DEBUG DRV_NAME ": RX pk_addr:0x%04x\n",
+ priv->next_pk_ptr);
+ if (unlikely(priv->next_pk_ptr > RXEND_INIT)) {
+ if (netif_msg_rx_err(priv))
+ dev_err(&ndev->dev,
+ "%s() Invalid packet address!! 0x%04x\n",
+ __func__, priv->next_pk_ptr);
+ mutex_lock(&priv->lock);
+ enc424j600_clear_bits(priv, ECON1L, RXEN);
+ enc424j600_set_bits(priv, ECON2L, RXRST);
+ enc424j600_clear_bits(priv, ECON2L, RXRST);
+ nolock_rxfifo_init(priv, RXSTART, RXEND_INIT);
+ enc424j600_clear_bits(priv, EIRL, RXABTIF);
+ enc424j600_set_bits(priv, ECON1L, RXEN);
+ mutex_unlock(&priv->lock);
+ ndev->stats.rx_errors++;
+ return;
+ }
+
+ /* Read next packet pointer and rx status vector */
+ enc424j600_read_sram(priv, rsv, sizeof(rsv), priv->next_pk_ptr,
+ RXWINDOW);
+
+ next_packet = rsv[1];
+ next_packet <<= 8;
+ next_packet |= rsv[0];
+
+ len = rsv[3];
+ len <<= 8;
+ len |= rsv[2];
+
+ rxstat = rsv[5];
+ rxstat <<= 8;
+ rxstat |= rsv[4];
+
+ if (netif_msg_rx_status(priv))
+ enc424j600_dump_rsv(priv, __func__, next_packet, len, rxstat);
+
+ if (!RSV_GETBIT(rxstat, RSV_RXOK) || len > MAX_FRAMELEN) {
+ if (netif_msg_rx_err(priv))
+ dev_err(&ndev->dev, "Rx Error (%04x)\n", rxstat);
+ ndev->stats.rx_errors++;
+ if (RSV_GETBIT(rxstat, RSV_CRCERROR))
+ ndev->stats.rx_crc_errors++;
+ if (RSV_GETBIT(rxstat, RSV_LENCHECKERR))
+ ndev->stats.rx_frame_errors++;
+ if (len > MAX_FRAMELEN)
+ ndev->stats.rx_over_errors++;
+ } else {
+ skb = dev_alloc_skb(len + NET_IP_ALIGN);
+ if (!skb) {
+ if (netif_msg_rx_err(priv))
+ dev_err(&ndev->dev,
+ "out of memory for Rx'd frame\n");
+ ndev->stats.rx_dropped++;
+ } else {
+ skb->dev = ndev;
+ skb_reserve(skb, NET_IP_ALIGN);
+
+ /* copy the packet from the receive buffer */
+ enc424j600_read_sram(priv, skb_put(skb, len), len,
+ rx_packet_start(priv->next_pk_ptr),
+ RXWINDOW);
+
+ if (netif_msg_pktdata(priv))
+ dump_packet(__func__, skb->len, skb->data);
+ skb->protocol = eth_type_trans(skb, ndev);
+ /* update statistics */
+ ndev->stats.rx_packets++;
+ ndev->stats.rx_bytes += len;
+ netif_rx_ni(skb);
+ }
+ }
+ newrxtail = next_packet - 2;
+ if (next_packet == RXSTART)
+ newrxtail = SRAMSIZE - 2;
+
+ enc424j600_write_16b_sfr(priv, ERXTAILL, newrxtail);
+ /*
+ * Move the RX read pointer to the start of the next
+ * received packet.
+ * This frees the memory we just read out
+ */
+ erxrdpt = erxrdpt_workaround(next_packet, RXSTART, RXEND_INIT);
+ if (netif_msg_hw(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() ERXRDPT:0x%04x\n", __func__,
+ erxrdpt);
+
+ /*TODO: remove mutex_lock wherever not required*/
+ mutex_lock(&priv->lock);
+ enc424j600_write_16b_sfr(priv, ERXRDPTL, erxrdpt);
+
+ priv->next_pk_ptr = next_packet;
+ enc424j600_read_8b_sfr(priv, ESTATL, &pkcnt);
+ enc424j600_read_16b_sfr(priv, ERXHEADL, &head);
+ enc424j600_read_16b_sfr(priv, ERXTAILL, &tail);
+ /* we are done with this packet, decrement the packet counter */
+ enc424j600_set_bits(priv, ECON1H, PKTDEC);
+
+ mutex_unlock(&priv->lock);
+}
+
+/*
+ * Access the PHY to determine link status
+ */
+static void enc424j600_check_link_status(struct enc424j600_net *priv)
+{
+ u8 estath;
+ u16 macon2;
+
+ enc424j600_read_8b_sfr(priv, ESTATH, &estath);
+ if (estath & PHYLNK) {
+ if (priv->autoneg) {
+ if (!enc424j600_wait_for_autoneg(priv)) {
+ if (estath & PHYDPX) {
+ printk(KERN_ALERT "Full Duplex");
+ enc424j600_read_16b_sfr(priv, MACON2L,
+ &macon2);
+ macon2 |= FULDPX;
+ enc424j600_write_16b_sfr(priv, MACON2L,
+ macon2);
+ }
+ } else /*if timed out, disable autoneg and continue */
+ priv->autoneg = AUTONEG_DISABLE;
+ }
+ netif_carrier_on(priv->netdev);
+ if (netif_msg_ifup(priv))
+ dev_info(&(priv->netdev->dev), "link up\n");
+ } else {
+ if (netif_msg_ifdown(priv))
+ dev_info(&(priv->netdev->dev), "link down\n");
+ netif_carrier_off(priv->netdev);
+ }
+}
+
+static void enc424j600_tx_clear(struct enc424j600_net *priv, bool err)
+{
+ struct net_device *ndev = priv->netdev;
+ if (err)
+ ndev->stats.tx_errors++;
+ else
+ ndev->stats.tx_packets++;
+
+ if (priv->tx_skb) {
+ if (!err)
+ ndev->stats.tx_bytes += priv->tx_skb->len;
+ dev_kfree_skb(priv->tx_skb);
+ priv->tx_skb = NULL;
+ }
+
+ netif_wake_queue(ndev);
+}
+
+static int enc424j600_int_rx_abbort_handler(struct enc424j600_net *priv,
+ int loop)
+{
+ loop++;
+ if (netif_msg_intr(priv))
+ printk(KERN_DEBUG DRV_NAME ": intRXAbt(%d)\n", loop);
+ mutex_lock(&priv->lock);
+ priv->netdev->stats.rx_dropped++;
+ enc424j600_clear_bits(priv, EIRL, RXABTIF);
+ mutex_unlock(&priv->lock);
+
+ return loop;
+}
+
+static int enc424j600_int_link_handler(struct enc424j600_net *priv, int loop)
+{
+ loop++;
+ if (netif_msg_intr(priv))
+ printk(KERN_DEBUG DRV_NAME ": intLINK(%d)\n", loop);
+
+ /* we check more than is necessary here --
+ * only PHYLNK would be needed. */
+ enc424j600_check_link_status(priv);
+
+ return loop;
+}
+
+static int enc424j600_int_tx_handler(struct enc424j600_net *priv, int loop)
+{
+ loop++;
+
+ if (netif_msg_intr(priv))
+ printk(KERN_DEBUG DRV_NAME ": intTX(%d)\n", loop);
+
+ mutex_lock(&priv->lock);
+ enc424j600_tx_clear(priv, false);
+ enc424j600_clear_bits(priv, EIRL, TXIF);
+ mutex_unlock(&priv->lock);
+
+ return loop;
+}
+
+static int enc424j600_int_tx_err_handler(struct enc424j600_net *priv, int loop)
+{
+ u8 etxstat;
+ loop++;
+ if (netif_msg_intr(priv))
+ printk(KERN_DEBUG DRV_NAME ": intTXErr(%d)\n", loop);
+
+ mutex_lock(&priv->lock);
+
+ enc424j600_read_8b_sfr(priv, ETXSTATH, &etxstat);
+
+ if (etxstat & LATECOL) {
+ if (netif_msg_tx_err(priv))
+ printk(KERN_DEBUG DRV_NAME
+ ": Late collision TXErr (%d)\n",
+ priv->tx_retry_count);
+ if (priv->tx_retry_count++ < MAX_TX_RETRYCOUNT)
+ enc424j600_set_bits(priv, ECON1L, TXRTS);
+ else
+ enc424j600_tx_clear(priv, true);
+ } else if (etxstat & MAXCOL) {
+ if (netif_msg_tx_err(priv))
+ printk(KERN_DEBUG DRV_NAME ": Max collisions TXErr\n");
+ enc424j600_tx_clear(priv, true);
+ } else {
+ enc424j600_tx_clear(priv, true);
+ }
+
+ mutex_unlock(&priv->lock);
+
+ return loop;
+}
+
+static int enc424j600_int_received_packet_handler(struct enc424j600_net *priv)
+{
+ uint8_t pk_counter;
+ int ret;
+
+ enc424j600_read_8b_sfr(priv, ESTATL, &pk_counter);
+ if (pk_counter && netif_msg_intr(priv))
+ printk(KERN_DEBUG DRV_NAME ": intRX, pk_cnt: %d\n", pk_counter);
+ if (pk_counter > priv->max_pk_counter) {
+ /* update statistics */
+ priv->max_pk_counter = pk_counter;
+ if (netif_msg_rx_status(priv) && priv->max_pk_counter > 1)
+ printk(KERN_DEBUG DRV_NAME ": RX max_pk_cnt: %d\n",
+ priv->max_pk_counter);
+ }
+ ret = pk_counter;
+ while (pk_counter-- > 0)
+ enc424j600_hw_rx(priv->netdev);
+ return ret;
+}
+
+static void enc424j600_irq_work_handler(struct work_struct *work)
+{
+
+ struct enc424j600_net *priv =
+ container_of(work, struct enc424j600_net, irq_work);
+ int loop;
+ if (netif_msg_intr(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() enter\n", __func__);
+
+ /* disable further interrupts */
+ enc424j600_clear_bits(priv, EIEH, INTIE);
+
+ do {
+ u16 intflags;
+ enc424j600_read_16b_sfr(priv, EIRL, &intflags);
+ loop = 0;
+
+ /* LINK changed handler */
+ if ((intflags & LINKIF) != 0)
+ loop = enc424j600_int_link_handler(priv, loop);
+
+ /* TX complete handler */
+ if ((intflags & TXIF) != 0)
+ loop = enc424j600_int_tx_handler(priv, loop);
+
+ /* TX Error handler */
+ if ((intflags & TXABTIF) != 0) {
+ printk(KERN_ALERT "ABORTING TRANSMITTING PACKET");
+ loop = enc424j600_int_tx_err_handler(priv, loop);
+ }
+ /* RX Error handler */
+ if ((intflags & RXABTIF) != 0) {
+ printk(KERN_ALERT "ABORTING RECEIVED PACKET");
+ loop = enc424j600_int_rx_abbort_handler(priv, loop);
+ }
+ /* RX handler */
+ if ((intflags & PKTIF) != 0)
+ loop = enc424j600_int_received_packet_handler(priv);
+ enc424j600_clear_bits(priv, EIRL, intflags && 0xff);
+ enc424j600_clear_bits(priv, EIRH, intflags >> 8);
+ } while (loop);
+ /* re-enable interrupts */
+ enc424j600_set_bits(priv, EIEH, INTIE);
+
+ if (netif_msg_intr(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() exit\n", __func__);
+}
+
+void locked_reg_bfset(struct enc424j600_net *priv, u8 addr, u8 mask)
+{
+ mutex_lock(&priv->lock);
+ enc424j600_set_bits(priv, addr, mask);
+ mutex_unlock(&priv->lock);
+}
+
+/*
+ * Hardware transmit function.
+ * Fill the buffer memory and send the contents of the transmit buffer
+ * onto the network
+ */
+static void enc424j600_hw_tx(struct enc424j600_net *priv)
+{
+ if (!priv->tx_skb) {
+ enc424j600_tx_clear(priv, false);
+ return;
+ }
+
+ if (netif_msg_tx_queued(priv))
+ printk(KERN_DEBUG DRV_NAME ": Tx Packet Len:%d\n",
+ priv->tx_skb->len);
+
+ if (netif_msg_pktdata(priv))
+ dump_packet(__func__, priv->tx_skb->len, priv->tx_skb->data);
+
+ enc424j600_write_sram(priv, priv->tx_skb->data, priv->tx_skb->len,
+ TXSTART, GPWINDOW);
+
+ /* Set the tx pointer to start of general purpose SRAM area */
+ enc424j600_write_16b_sfr(priv, ETXSTL, TXSTART);
+
+ /* Write the transfer length */
+ enc424j600_write_16b_sfr(priv, ETXLENL, priv->tx_skb->len);
+
+ /* set TX request flag */
+ locked_reg_bfset(priv, ECON1L, TXRTS);
+}
+
+static int enc424j600_send_packet(struct sk_buff *skb, struct net_device *dev)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+ if (netif_msg_tx_queued(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() enter\n", __func__);
+
+ /* If some error occurs while trying to transmit this
+ * packet, you should return '1' from this function.
+ * In such a case you _may not_ do anything to the
+ * SKB, it is still owned by the network queueing
+ * layer when an error is returned. This means you
+ * may not modify any SKB fields, you may not free
+ * the SKB, etc.
+ */
+ netif_stop_queue(dev);
+
+ /* save the timestamp */
+ priv->netdev->trans_start = jiffies;
+ /* Remember the skb for deferred processing */
+ priv->tx_skb = skb;
+ schedule_work(&priv->tx_work);
+
+ return NETDEV_TX_OK;
+}
+
+static void enc424j600_tx_work_handler(struct work_struct *work)
+{
+ struct enc424j600_net *priv =
+ container_of(work, struct enc424j600_net, tx_work);
+
+ /* actual delivery of data */
+ enc424j600_hw_tx(priv);
+}
+
+static irqreturn_t enc424j600_irq(int irq, void *dev_id)
+{
+ struct enc424j600_net *priv = dev_id;
+ /*
+ * Can't do anything in interrupt context because we need to
+ * block (spi_sync() is blocking) so fire of the interrupt
+ * handling workqueue.
+ * Remember that we access enc424j600 registers through SPI bus
+ * via spi_sync() call.
+ */
+ schedule_work(&priv->irq_work);
+
+ return IRQ_HANDLED;
+}
+
+static void enc424j600_tx_timeout(struct net_device *ndev)
+{
+ struct enc424j600_net *priv = netdev_priv(ndev);
+
+ if (netif_msg_timer(priv))
+ dev_err(&ndev->dev, DRV_NAME " tx timeout\n");
+
+ ndev->stats.tx_errors++;
+ /* can't restart safely under softirq */
+ schedule_work(&priv->restart_work);
+}
+
+/*
+ * Open/initialize the board. This is called (in the current kernel)
+ * sometime after booting when the 'ifconfig' program is run.
+ *
+ * This routine should set everything up anew at each open, even
+ * registers that "should" only need to be set once at boot, so that
+ * there is non-reboot way to recover if something goes wrong.
+ */
+static int enc424j600_net_open(struct net_device *dev)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() enter\n", __func__);
+
+ if (!is_valid_ether_addr(dev->dev_addr)) {
+ if (netif_msg_ifup(priv))
+ dev_err(&dev->dev, "invalid MAC address %pM\n",
+ dev->dev_addr);
+ return -EADDRNOTAVAIL;
+ }
+ /* Reset the hardware here (and take it out of low power mode) */
+ enc424j600_lowpower(priv, false);
+ enc424j600_hw_disable(priv);
+ if (!enc424j600_hw_init(priv)) {
+ if (netif_msg_ifup(priv))
+ dev_err(&dev->dev, "hw_reset() failed\n");
+ return -EINVAL;
+ }
+ /* Update the MAC address (in case user has changed it) */
+ enc424j600_set_hw_macaddr(dev);
+ /* Enable interrupts */
+ enc424j600_hw_enable(priv);
+ /* check link status */
+ enc424j600_check_link_status(priv);
+ /* We are now ready to accept transmit requests from
+ * the queueing layer of the networking.
+ */
+ netif_start_queue(dev);
+
+ return 0;
+}
+
+/* The inverse routine to net_open(). */
+static int enc424j600_net_close(struct net_device *dev)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": %s() enter\n", __func__);
+
+ enc424j600_hw_disable(priv);
+ enc424j600_lowpower(priv, true);
+ netif_stop_queue(dev);
+
+ return 0;
+}
+
+/*
+ * Set or clear the multicast filter for this adapter
+ * num_addrs == -1 Promiscuous mode, receive all packets
+ * num_addrs == 0 Normal mode, filter out multicast packets
+ * num_addrs > 0 Multicast mode, receive normal and MC packets
+ */
+static void enc424j600_set_multicast_list(struct net_device *dev)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+ int oldfilter = priv->rxfilter;
+
+ if (dev->flags & IFF_PROMISC) {
+ if (netif_msg_link(priv))
+ dev_info(&dev->dev, "promiscuous mode\n");
+ priv->rxfilter = RXFILTER_PROMISC;
+ } else if ((dev->flags & IFF_ALLMULTI) || dev->mc_count) {
+ if (netif_msg_link(priv))
+ dev_info(&dev->dev, "%smulticast mode\n",
+ (dev->flags & IFF_ALLMULTI) ? "all-" : "");
+ priv->rxfilter = RXFILTER_MULTI;
+ } else {
+ if (netif_msg_link(priv))
+ dev_info(&dev->dev, "normal mode\n");
+ priv->rxfilter = RXFILTER_NORMAL;
+ }
+
+ if (oldfilter != priv->rxfilter)
+ schedule_work(&priv->setrx_work);
+}
+
+void locked_regb_write(struct enc424j600_net *priv, u8 address, u8 data)
+{
+ mutex_lock(&priv->lock);
+ enc424j600_write_8b_sfr(priv, address, data);
+ mutex_unlock(&priv->lock);
+}
+
+static void enc424j600_setrx_work_handler(struct work_struct *work)
+{
+ u16 macon1;
+ struct enc424j600_net *priv =
+ container_of(work, struct enc424j600_net, setrx_work);
+
+ if (priv->rxfilter == RXFILTER_PROMISC) {
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": promiscuous mode\n");
+ enc424j600_read_16b_sfr(priv, MACON1L, &macon1);
+ macon1 = macon1 | PASSALL;
+ enc424j600_write_16b_sfr(priv, MACON1L, macon1);
+ locked_regb_write(priv, ERXFCONL, UCEN | MCEN | NOTMEEN);
+ } else if (priv->rxfilter == RXFILTER_MULTI) {
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": multicast mode\n");
+ locked_regb_write(priv, ERXFCONL, UCEN | CRCEN | BCEN | MCEN);
+
+ } else {
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": normal mode\n");
+ locked_regb_write(priv, ERXFCONL, UCEN | CRCEN | BCEN);
+
+ }
+}
+
+static void enc424j600_restart_work_handler(struct work_struct *work)
+{
+ struct enc424j600_net *priv =
+ container_of(work, struct enc424j600_net, restart_work);
+ struct net_device *ndev = priv->netdev;
+ int ret;
+
+ rtnl_lock();
+ if (netif_running(ndev)) {
+ enc424j600_net_close(ndev);
+ ret = enc424j600_net_open(ndev);
+ if (unlikely(ret)) {
+ dev_info(&ndev->dev, " could not restart %d\n", ret);
+ dev_close(ndev);
+ }
+ }
+ rtnl_unlock();
+}
+
+/* ......................... ETHTOOL SUPPORT ........................... */
+
+static void
+enc424j600_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+{
+ strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
+ strlcpy(info->version, DRV_VERSION, sizeof(info->version));
+ strlcpy(info->bus_info,
+ dev_name(dev->dev.parent), sizeof(info->bus_info));
+}
+
+static int
+enc424j600_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+
+ cmd->transceiver = XCVR_INTERNAL;
+ cmd->supported = SUPPORTED_10baseT_Half
+ | SUPPORTED_10baseT_Full
+ | SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full | SUPPORTED_TP;
+
+ cmd->speed = priv->speed100 ? SPEED_100 : SPEED_10;
+ cmd->duplex = priv->full_duplex ? DUPLEX_FULL : DUPLEX_HALF;
+ cmd->port = PORT_TP;
+ cmd->autoneg = priv->autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE;
+
+ return 0;
+}
+
+static int
+enc424j600_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+ return enc424j600_setlink(dev, cmd->autoneg, cmd->speed, cmd->duplex);
+}
+
+static u32 enc424j600_get_msglevel(struct net_device *dev)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+
+ return priv->msg_enable;
+}
+
+static void enc424j600_set_msglevel(struct net_device *dev, u32 val)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+
+ priv->msg_enable = val;
+}
+
+static const struct ethtool_ops enc424j600_ethtool_ops = {
+ .get_settings = enc424j600_get_settings,
+ .set_settings = enc424j600_set_settings,
+ .get_drvinfo = enc424j600_get_drvinfo,
+ .get_msglevel = enc424j600_get_msglevel,
+ .set_msglevel = enc424j600_set_msglevel,
+};
+
+static int enc424j600_chipset_init(struct net_device *dev)
+{
+ struct enc424j600_net *priv = netdev_priv(dev);
+
+ enc424j600_get_hw_macaddr(dev);
+ return enc424j600_hw_init(priv);
+
+}
+
+static const struct net_device_ops enc424j600_netdev_ops = {
+ .ndo_open = enc424j600_net_open,
+ .ndo_stop = enc424j600_net_close,
+ .ndo_start_xmit = enc424j600_send_packet,
+ .ndo_set_multicast_list = enc424j600_set_multicast_list,
+ .ndo_set_mac_address = enc424j600_set_mac_address,
+ .ndo_tx_timeout = enc424j600_tx_timeout,
+ .ndo_change_mtu = eth_change_mtu,
+ .ndo_validate_addr = eth_validate_addr,
+};
+
+static int __devinit enc424j600_probe(struct spi_device *spi)
+{
+ struct net_device *dev;
+ struct enc424j600_net *priv;
+ int ret = 0;
+
+ if (netif_msg_drv(&debug))
+ dev_info(&spi->dev, DRV_NAME " Ethernet driver %s loaded\n",
+ DRV_VERSION);
+
+ dev = alloc_etherdev(sizeof(struct enc424j600_net));
+ if (!dev) {
+ if (netif_msg_drv(&debug))
+ dev_err(&spi->dev, DRV_NAME
+ ": unable to alloc new ethernet\n");
+ ret = -ENOMEM;
+ goto error_alloc;
+ }
+ priv = netdev_priv(dev);
+
+ priv->netdev = dev; /* priv to netdev reference */
+ priv->spi = spi; /* priv to spi reference */
+ priv->msg_enable = netif_msg_init(debug.msg_enable,
+ ENC424J600_MSG_DEFAULT);
+ mutex_init(&priv->lock);
+ INIT_WORK(&priv->tx_work, enc424j600_tx_work_handler);
+ INIT_WORK(&priv->setrx_work, enc424j600_setrx_work_handler);
+ INIT_WORK(&priv->irq_work, enc424j600_irq_work_handler);
+ INIT_WORK(&priv->restart_work, enc424j600_restart_work_handler);
+ dev_set_drvdata(&spi->dev, priv); /* spi to priv reference */
+ SET_NETDEV_DEV(dev, &spi->dev);
+ /*TODO: chip DMA features to be utilized */
+ /* If requested, allocate DMA buffers */
+ if (enc424j600_enable_dma) {
+ spi->dev.coherent_dma_mask = ~0;
+
+ /*
+ * Minimum coherent DMA allocation is PAGE_SIZE, so allocate
+ * that much and share it between Tx and Rx DMA buffers.
+ */
+#if SPI_TRANSFER_BUF_LEN > PAGE_SIZE / 2
+#error "A problem in DMA buffer allocation"
+#endif
+ priv->spi_tx_buf = dma_alloc_coherent(&spi->dev,
+ PAGE_SIZE,
+ &priv->spi_tx_dma,
+ GFP_DMA);
+
+ if (priv->spi_tx_buf) {
+ priv->spi_rx_buf = (u8 *) (priv->spi_tx_buf +
+ (PAGE_SIZE / 2));
+ priv->spi_rx_dma = (dma_addr_t) (priv->spi_tx_dma +
+ (PAGE_SIZE / 2));
+ } else {
+ /* Fall back to non-DMA */
+ enc424j600_enable_dma = 0;
+ }
+ }
+
+ /* Allocate non-DMA buffers */
+ if (!enc424j600_enable_dma) {
+ priv->spi_tx_buf = kmalloc(SPI_TRANSFER_BUF_LEN, GFP_KERNEL);
+ if (!priv->spi_tx_buf) {
+ ret = -ENOMEM;
+ goto error_tx_buf;
+ }
+ priv->spi_rx_buf = kmalloc(SPI_TRANSFER_BUF_LEN, GFP_KERNEL);
+ if (!priv->spi_rx_buf) {
+ ret = -ENOMEM;
+ goto error_rx_buf;
+ }
+ }
+
+ if (!enc424j600_chipset_init(dev)) {
+ if (netif_msg_probe(priv))
+ dev_info(&spi->dev, DRV_NAME " chip not found\n");
+ ret = -EIO;
+ goto error_irq;
+ }
+
+ /* Board setup must set the relevant edge trigger type;
+ * level triggers won't currently work.
+ */
+ ret = request_irq(spi->irq, enc424j600_irq, 0, DRV_NAME, priv);
+ if (ret < 0) {
+ if (netif_msg_probe(priv))
+ dev_err(&spi->dev, DRV_NAME ": request irq %d failed "
+ "(ret = %d)\n", spi->irq, ret);
+ goto error_irq;
+ }
+
+ dev->if_port = IF_PORT_10BASET;
+ dev->irq = spi->irq;
+ dev->netdev_ops = &enc424j600_netdev_ops;
+ dev->watchdog_timeo = TX_TIMEOUT;
+ SET_ETHTOOL_OPS(dev, &enc424j600_ethtool_ops);
+
+ enc424j600_lowpower(priv, true);
+
+ ret = register_netdev(dev);
+ if (ret) {
+ if (netif_msg_probe(priv))
+ dev_err(&spi->dev, "register netdev " DRV_NAME
+ " failed (ret = %d)\n", ret);
+ goto error_register;
+ }
+ dev_info(&dev->dev, DRV_NAME " driver registered\n");
+
+ return 0;
+
+error_register:
+ free_irq(spi->irq, priv);
+error_irq:
+ free_netdev(dev);
+ if (!enc424j600_enable_dma)
+ kfree(priv->spi_rx_buf);
+error_rx_buf:
+ if (!enc424j600_enable_dma)
+ kfree(priv->spi_tx_buf);
+error_tx_buf:
+ if (enc424j600_enable_dma) {
+ dma_free_coherent(&spi->dev, PAGE_SIZE,
+ priv->spi_tx_buf, priv->spi_tx_dma);
+ }
+error_alloc:
+ return ret;
+}
+
+static int __devexit enc424j600_remove(struct spi_device *spi)
+{
+ struct enc424j600_net *priv = dev_get_drvdata(&spi->dev);
+
+ if (netif_msg_drv(priv))
+ printk(KERN_DEBUG DRV_NAME ": remove\n");
+
+ unregister_netdev(priv->netdev);
+ free_irq(spi->irq, priv);
+ free_netdev(priv->netdev);
+
+ return 0;
+}
+
+static struct spi_driver enc424j600_driver = {
+ .driver = {
+ .name = DRV_NAME,
+ .owner = THIS_MODULE,
+ },
+ .probe = enc424j600_probe,
+ .remove = __devexit_p(enc424j600_remove),
+};
+
+static int __init enc424j600_init(void)
+{
+ msec20_to_jiffies = msecs_to_jiffies(20);
+ /*autoneg works from 1600ms */
+ msec2000_to_jiffies = msecs_to_jiffies(2000);
+
+ return spi_register_driver(&enc424j600_driver);
+}
+
+module_init(enc424j600_init);
+
+static void __exit enc424j600_exit(void)
+{
+ spi_unregister_driver(&enc424j600_driver);
+}
+
+module_exit(enc424j600_exit);
+
+MODULE_DESCRIPTION(DRV_NAME " ethernet driver");
+MODULE_AUTHOR("Balaji Venkatachalam <balaji.v@thotakaa.com>");
+MODULE_LICENSE("GPL");
+module_param_named(debug, debug.msg_enable, int, 0);
+MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., ffff=all)");
+module_param(enc424j600_enable_dma, int, S_IRUGO);
+MODULE_PARM_DESC(enc424j600_enable_dma, "Enable SPI DMA. Default: 0 (Off)");
+MODULE_ALIAS("spi:" DRV_NAME);
diff -uprN -X a/Documentation/dontdiff a/drivers/net/enc424j600_hw.h
b/drivers/net/enc424j600_hw.h
--- a/drivers/net/enc424j600_hw.h 1970-01-01 05:30:00.000000000 +0530
+++ b/drivers/net/enc424j600_hw.h 2011-01-05 23:51:24.000000000 +0530
@@ -0,0 +1,460 @@
+/*
+* enc424j600_hw.h: Register definitions
+*
+*/
+
+#ifndef _ENC424J600_HW_H
+#define _ENC424J600_HW_H
+
+/*
+* ENC424J600 Control Registers
+* Control register definitions are a combination of address
+* and bank number
+* - Register address (bits 0-4)
+* - Bank number (bits 5-6)
+*/
+#define ADDR_MASK 0x1F
+#define BANK_MASK 0x60
+#define BANK_SHIFT 5
+
+/* All-bank registers */
+#define EUDASTL 0x16
+#define EUDASTH 0x17
+#define EUDANDL 0x18
+#define EUDANDH 0x19
+#define ESTATL 0x1A
+#define ESTATH 0x1B
+#define EIRL 0x1C
+#define EIRH 0x1D
+#define ECON1L 0x1E
+#define ECON1H 0x1F
+
+/* Bank 0 registers */
+#define ETXSTL (0x00 | 0x00)
+#define ETXSTH (0x01 | 0x00)
+#define ETXLENL (0x02 | 0x00)
+#define ETXLENH (0x03 | 0x00)
+#define ERXSTL (0x04 | 0x00)
+#define ERXSTH (0x05 | 0x00)
+#define ERXTAILL (0x06 | 0x00)
+#define ERXTAILH (0x07 | 0x00)
+#define ERXHEADL (0x08 | 0x00)
+#define ERXHEADH (0x09 | 0x00)
+#define EDMASTL (0x0A | 0x00)
+#define EDMASTH (0x0B | 0x00)
+#define EDMALENL (0x0C | 0x00)
+#define EDMALENH (0x0D | 0x00)
+#define EDMADSTL (0x0E | 0x00)
+#define EDMADSTH (0x0F | 0x00)
+#define EDMACSL (0x10 | 0x00)
+#define EDMACSH (0x11 | 0x00)
+#define ETXSTATL (0x12 | 0x00)
+#define ETXSTATH (0x13 | 0x00)
+#define ETXWIREL (0x14 | 0x00)
+#define ETXWIREH (0x15 | 0x00)
+
+/* Bank 1 registers */
+#define EHT1L (0x00 | 0x20)
+#define EHT1H (0x01 | 0x20)
+#define EHT2L (0x02 | 0x20)
+#define EHT2H (0x03 | 0x20)
+#define EHT3L (0x04 | 0x20)
+#define EHT3H (0x05 | 0x20)
+#define EHT4L (0x06 | 0x20)
+#define EHT4H (0x07 | 0x20)
+#define EPMM1L (0x08 | 0x20)
+#define EPMM1H (0x09 | 0x20)
+#define EPMM2L (0x0A | 0x20)
+#define EPMM2H (0x0B | 0x20)
+#define EPMM3L (0x0C | 0x20)
+#define EPMM3H (0x0D | 0x20)
+#define EPMM4L (0x0E | 0x20)
+#define EPMM4H (0x0F | 0x20)
+#define EPMCSL (0x10 | 0x20)
+#define EPMCSH (0x11 | 0x20)
+#define EPMOL (0x12 | 0x20)
+#define EPMOH (0x13 | 0x20)
+#define ERXFCONL (0x14 | 0x20)
+#define ERXFCONH (0x15 | 0x20)
+
+/* Bank 2 registers */
+#define MACON1L (0x00 | 0x40)
+#define MACON1H (0x01 | 0x40)
+#define MACON2L (0x02 | 0x40)
+#define MACON2H (0x03 | 0x40)
+#define MABBIPGL (0x04 | 0x40)
+#define MABBIPGH (0x05 | 0x40)
+#define MAIPGL (0x06 | 0x40)
+#define MAIPGH (0x07 | 0x40)
+#define MACLCONL (0x08 | 0x40)
+#define MACLCONH (0x09 | 0x40)
+#define MAMXFLL (0x0A | 0x40)
+#define MAMXFLH (0x0B | 0x40)
+#define MICMDL (0x12 | 0x40)
+#define MICMDH (0x13 | 0x40)
+#define MIREGADRL (0x14 | 0x40)
+#define MIREGADRH (0x15 | 0x40)
+
+/* Bank 3 registers */
+#define MAADR3L (0x00 | 0x60)
+#define MAADR3H (0x01 | 0x60)
+#define MAADR2L (0x02 | 0x60)
+#define MAADR2H (0x03 | 0x60)
+#define MAADR1L (0x04 | 0x60)
+#define MAADR1H (0x05 | 0x60)
+#define MIWRL (0x06 | 0x60)
+#define MIWRH (0x07 | 0x60)
+#define MIRDL (0x08 | 0x60)
+#define MIRDH (0x09 | 0x60)
+#define MISTATL (0x0A | 0x60)
+#define MISTATH (0x0B | 0x60)
+#define EPAUSL (0x0C | 0x60)
+#define EPAUSH (0x0D | 0x60)
+#define ECON2L (0x0E | 0x60)
+#define ECON2H (0x0F | 0x60)
+#define ERXWML (0x10 | 0x60)
+#define ERXWMH (0x11 | 0x60)
+#define EIEL (0x12 | 0x60)
+#define EIEH (0x13 | 0x60)
+#define EIDLEDL (0x14 | 0x60)
+#define EIDLEDH (0x15 | 0x60)
+
+/* Unbanked registers */
+#define EGPDATA (0x00 | 0x80)
+#define ERXDATA (0x02 | 0x80)
+#define EUDADATA (0x04 | 0x80)
+#define EGPRDPTL (0x06 | 0x80)
+#define EGPRDPTH (0x07 | 0x80)
+#define EGPWRPTL (0x08 | 0x80)
+#define EGPWRPTH (0x09 | 0x80)
+#define ERXRDPTL (0x0A | 0x80)
+#define ERXRDPTH (0x0B | 0x80)
+#define ERXWRPTL (0x0C | 0x80)
+#define ERXWRPTH (0x0D | 0x80)
+#define EUDARDPTL (0x0E | 0x80)
+#define EUDARDPTH (0x0F | 0x80)
+#define EUDAWRPTL (0x10 | 0x80)
+#define EUDAWRPTH (0x11 | 0x80)
+
+/* PHY registers */
+#define PHCON1 0x00
+#define PHSTAT1 0x01
+#define PHANA 0x04
+#define PHANLPA 0x05
+#define PHANE 0x06
+#define PHCON2 0x11
+#define PHSTAT2 0x1B
+#define PHSTAT3 0x1F
+
+/* Single-byte instructions */
+#define BXSEL(bank) (0xC0 + (bank & (BANK_MASK >> BANK_SHIFT)) * 2)
+/* Bank X Select */
+#define B0SEL 0xC0 /* Bank 0 Select */
+#define B1SEL 0xC2 /* Bank 1 Select */
+#define B2SEL 0xC4 /* Bank 2 Select */
+#define B3SEL 0xC6 /* Bank 3 Select */
+#define SETETHRST 0xCA /* System Reset */
+#define FCDISABLE 0xE0 /* Flow Control Disable */
+#define FCSINGLE 0xE2 /* Flow Control Single */
+#define FCMULTIPLE 0xE4 /* Flow Control Multiple */
+#define FCCLEAR 0xE6 /* Flow Control Clear */
+#define SETPKTDEC 0xCC /* Decrement Packet Counter */
+#define DMASTOP 0xD2 /* DMA Stop */
+#define DMACKSUM 0xD8 /* DMA Start Checksum */
+#define DMACKSUMS 0xDA /* DMA Start Checksum with Seed */
+#define DMACOPY 0xDC /* DMA Start Copy */
+#define DMACOPYS 0xDE /* DMA Start Copy and Checksum with Seed */
+#define SETTXRTS 0xD4 /* Request Packet Transmission */
+#define ENABLERX 0xE8 /* Enable RX */
+#define DISABLERX 0xEA /* Disable RX */
+#define SETEIE 0xEC /* Enable Interrupts */
+#define CLREIE 0xEE /* Disable Interrupts */
+
+/* Two byte instructions */
+#define RBSEL 0xC8 /* Read Bank Select */
+
+/* Three byte instructions */
+#define WGPRDPT 0x60 /* Write EGPRDPT */
+#define RGPRDPT 0x62 /* Read EGPRDPT */
+#define WRXRDPT 0x64 /* Write ERXRDPT */
+#define RRXRDPT 0x66 /* Read ERXRDPT */
+#define WUDARDPT 0x68 /* Write EUDARDPT */
+#define RUDARDPT 0x6A /* Read EUDARDPT */
+#define WGPWRPT 0x6C /* Write EGPWRPT */
+#define RGPWRPT 0x6E /* Read EGPWRPT */
+#define WRXWRPT 0x70 /* Write ERXWRPT */
+#define RRXWRPT 0x72 /* Read ERXWRPT */
+#define WUDAWRPT 0x74 /* Write EUDAWRPT */
+#define RUDAWRPT 0x76 /* Read EUDAWRPT */
+
+/* n byte instructions */
+#define RCR(addr) (0x00 | (addr & ADDR_MASK)) /* Read Control Register */
+#define WCR(addr) (0x40 | (addr & ADDR_MASK)) /* Write Control Register */
+#define RCRU 0x20 /* Read Control Register Unbanked */
+#define WCRU 0x22 /* Write Control Register Unbanked */
+#define BFS(addr) (0x80 | (addr & ADDR_MASK)) /* Bit Field Set */
+#define BFC(addr) (0xA0 | (addr & ADDR_MASK)) /* Bit Field Clear */
+#define BFSU 0x24 /* Bit Field Set Unbanked */
+#define BFCU 0x26 /* Bit Field Clear Unbanked */
+#define RGPDATA 0x28 /* Read EGPDATA */
+#define WGPDATA 0x2A /* Write EGPDATA */
+#define RRXDATA 0x2C /* Read ERXDATA */
+#define WRXDATA 0x2E /* Write ERXDATA */
+#define RUDADATA 0x30 /* Read EUDADATA */
+#define WUDADATA 0x32 /* Write EUDADATA */
+
+/* Register bit definitions */
+/* ESTATH */
+#define INT (1 << 7)
+#define FCIDLE (1 << 6)
+#define RXBUSY (1 << 5)
+#define CLKRDY (1 << 4)
+#define PHYDPX (1 << 2)
+#define PHYLNK (1 << 0)
+
+/* EIRH */
+/*for ease of use lets access it as a word*/
+#define CRYPTEN (1 << 15)
+#define MODEXIF (1 << 14)
+#define HASHIF (1 << 13)
+#define AESIF (1 << 12)
+#define LINKIF (1 << 11)
+
+/* EIRL */
+#define PKTIF (1 << 6)
+#define DMAIF (1 << 5)
+#define TXIF (1 << 3)
+#define TXABTIF (1 << 2)
+#define RXABTIF (1 << 1)
+#define PCFULIF (1 << 0)
+
+/* ECON1H */
+#define MODEXST (1 << 7)
+#define HASHEN (1 << 6)
+#define HASHOP (1 << 5)
+#define HASHLST (1 << 4)
+#define AESST (1 << 3)
+#define AESOP1 (1 << 2)
+#define AESOP0 (1 << 1)
+#define PKTDEC (1 << 0)
+
+/* ECON1L */
+#define FCOP1 (1 << 7)
+#define FCOP0 (1 << 6)
+#define DMAST (1 << 5)
+#define DMACPY (1 << 4)
+#define DMACSSD (1 << 3)
+#define DMANOCS (1 << 2)
+#define TXRTS (1 << 1)
+#define RXEN (1 << 0)
+
+/* ETXSTATH */
+#define LATECOL (1 << 2)
+#define MAXCOL (1 << 1)
+#define EXDEFER (1 << 0)
+
+/* ETXSTATL */
+#define ETXSTATL_DEFER (1 << 7)
+#define CRCBAD (1 << 4)
+#define COLCNT_MASK 0xF
+
+/* ERXFCONH */
+#define HTEN (1 << 7)
+#define MPEN (1 << 6)
+#define NOTPM (1 << 4)
+#define PMEN3 (1 << 3)
+#define PMEN2 (1 << 2)
+#define PMEN1 (1 << 1)
+#define PMEN0 (1 << 0)
+
+/* ERXFCONL */
+#define CRCEEN (1 << 7)
+#define CRCEN (1 << 6)
+#define RUNTEEN (1 << 5)
+#define RUNTEN (1 << 4)
+#define UCEN (1 << 3)
+#define NOTMEEN (1 << 2)
+#define MCEN (1 << 1)
+#define BCEN (1 << 0)
+/*no bytewise access*/
+/* MACON1L */
+#define LOOPBK (1 << 4)
+#define RXPAUS (1 << 2)
+#define PASSALL (1 << 1)
+
+/* MACON2 */
+#define MACON2_DEFER (1 << 14)
+#define BPEN (1 << 13)
+#define NOBKOFF (1 << 12)
+#define PADCFG2 (1 << 7)
+#define PADCFG1 (1 << 6)
+#define PADCFG0 (1 << 5)
+#define TXCRCEN (1 << 4)
+#define PHDREN (1 << 3)
+#define HFRMEN (1 << 2)
+#define FULDPX (1 << 0)
+
+/* MAIPG */
+/* value of the high byte is given by the reserved bits,
+* value of the low byte is recomended setting of the
+* IPG parameter.
+*/
+#define MAIPGH_VAL 0x0C
+#define MAIPGL_VAL 0x12
+
+/* MIREGADRH */
+#define MIREGADRH_VAL 0x01
+
+/* MIREGADRL */
+#define PHREG_MASK 0x1F
+
+/* MICMDL */
+#define MIISCAN (1 << 1)
+#define MIIRD (1 << 0)
+
+/* MISTATL */
+#define NVALID (1 << 2)
+#define SCAN (1 << 1)
+#define BUSY (1 << 0)
+
+/* ECON2H */
+#define ETHEN (1 << 7)
+#define STRCH (1 << 6)
+#define TXMAC (1 << 5)
+#define SHA1MD5 (1 << 4)
+#define COCON3 (1 << 3)
+#define COCON2 (1 << 2)
+#define COCON1 (1 << 1)
+#define COCON0 (1 << 0)
+
+/* ECON2L */
+#define AUTOFC (1 << 7)
+#define TXRST (1 << 6)
+#define RXRST (1 << 5)
+#define ETHRST (1 << 4)
+#define MODLEN1 (1 << 3)
+#define MODLEN0 (1 << 2)
+#define AESLEN1 (1 << 1)
+#define AESLEN0 (1 << 0)
+
+/* EIEH */
+#define INTIE (1 << 7)
+#define MODEXIE (1 << 6)
+#define HASHIE (1 << 5)
+#define AESIE (1 << 4)
+#define LINKIE (1 << 3)
+
+/* EIEL */
+#define PKTIE (1 << 6)
+#define DMAIE (1 << 5)
+#define TXIE (1 << 3)
+#define TXABTIE (1 << 2)
+#define RXABTIE (1 << 1)
+#define PCFULIE (1 << 0)
+
+/* EIDLEDH */
+#define LACFG3 (1 << 7)
+#define LACFG2 (1 << 6)
+#define LACFG1 (1 << 5)
+#define LACFG0 (1 << 4)
+#define LBCFG3 (1 << 3)
+#define LBCFG2 (1 << 2)
+#define LBCFG1 (1 << 1)
+#define LBCFG0 (1 << 0)
+
+/* EIDLEDL */
+#define DEVID_SHIFT 5
+#define DEVID_MASK (0x7 << DEVID_SHIFT)
+#define REVID_SHIFT 0
+#define REVID_MASK (0x1F << REVID_SHIFT)
+
+/* PHANA */
+/* Default value for PHY initialization*/
+#define PHANA_DEFAULT 0x05E1
+
+/* PHCON1 */
+#define PRST (1 << 15)
+#define PLOOPBK (1 << 14)
+#define SPD100 (1 << 13)
+#define ANEN (1 << 12)
+#define PSLEEP (1 << 11)
+#define RENEG (1 << 9)
+#define PFULDPX (1 << 8)
+
+/* PHSTAT */
+#define FULL100 (1 << 14)
+#define HALF100 (1 << 13)
+#define FULL10 (1 << 12)
+#define HALF10 (1 << 11)
+#define ANDONE (1 << 5)
+#define LRFAULT (1 << 4)
+#define ANABLE (1 << 3)
+#define LLSTAT (1 << 2)
+#define EXTREGS (1 << 0)
+
+#define EUDAST_TEST_VAL 0x1234
+
+#define TSV_SIZE 7
+
+#define ENC424J600_DEV_ID 0x1
+
+/* Configuration */
+
+/* Led is on when the link is present and driven low
+* temporarily when packet is TX'd or RX'd */
+#define LED_A_SETTINGS 0xC
+
+/* Led is on if the link is in 100 Mbps mode */
+#define LED_B_SETTINGS 0x8
+
+/* maximum ethernet frame length
+* Currently not used as a limit anywhere
+* (we're using the "huge frame enable" feature of
+* enc424j600). */
+#define MAX_FRAMELEN 1518
+
+/* Size in bytes of the receive buffer in enc424j600.
+* Must be word aligned (even).
+*/
+#define RX_BUFFER_SIZE (15 * MAX_FRAMELEN)
+
+/* Start of the general purpose area in sram */
+#define SRAM_GP_START 0x0
+
+/* SRAM size */
+#define SRAM_SIZE 0x6000
+
+/* Start of the receive buffer */
+#define ERXST_VAL (SRAM_SIZE - RX_BUFFER_SIZE)
+
+#define RSV_RXLONGEVDROPEV 16
+#define RSV_CARRIEREV 18
+#define RSV_CRCERROR 20
+#define RSV_LENCHECKERR 21
+#define RSV_LENOUTOFRANGE 22
+#define RSV_RXOK 23
+#define RSV_RXMULTICAST 24
+#define RSV_RXBROADCAST 25
+#define RSV_DRIBBLENIBBLE 26
+#define RSV_RXCONTROLFRAME 27
+#define RSV_RXPAUSEFRAME 28
+#define RSV_RXUNKNOWNOPCODE 29
+#define RSV_RXTYPEVLAN 30
+
+#define RSV_RUNTFILTERMATCH 31
+#define RSV_NOTMEFILTERMATCH 32
+#define RSV_HASHFILTERMATCH 33
+#define RSV_MAGICPKTFILTERMATCH 34
+#define RSV_PTRNMTCHFILTERMATCH 35
+#define RSV_UNICASTFILTERMATCH 36
+
+#define RSV_SIZE 8
+#define RSV_BITMASK(x) (1 << ((x) - 16))
+#define RSV_GETBIT(x, y) (((x) & RSV_BITMASK(y)) ? 1 : 0)
+
+/* Put RX buffer at 0 as suggested by the Errata datasheet */
+
+#define RXSTART_INIT ERXST_VAL
+#define RXEND_INIT 0x5FFF
+
+#endif
diff -uprN -X a/Documentation/dontdiff a/drivers/net/Kconfig
b/drivers/net/Kconfig
--- a/drivers/net/Kconfig 2010-07-05 22:41:43.000000000 +0530
+++ b/drivers/net/Kconfig 2011-01-16 15:26:16.000000000 +0530
@@ -973,6 +973,16 @@ config ENC28J60_WRITEVERIFY
Enable the verify after the buffer write useful for debugging purpose.
If unsure, say N.
+config ENC424J600
+ tristate "ENC424J600 support"
+ depends on EXPERIMENTAL && SPI && NET_ETHERNET
+ select CRC32
+ ---help---
+ Support for the Microchip EN424J600 ethernet chip.
+
+ To compile this driver as a module, choose M here. The module will be
+ called enc424j600.
+
config ETHOC
tristate "OpenCores 10/100 Mbps Ethernet MAC support"
depends on NET_ETHERNET && HAS_IOMEM
diff -uprN -X a/Documentation/dontdiff a/drivers/net/Makefile
b/drivers/net/Makefile
--- a/drivers/net/Makefile 2010-07-05 22:41:43.000000000 +0530
+++ b/drivers/net/Makefile 2011-01-05 21:46:57.000000000 +0530
@@ -240,6 +240,7 @@ obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_d
pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o
obj-$(CONFIG_MLX4_CORE) += mlx4/
obj-$(CONFIG_ENC28J60) += enc28j60.o
+obj-$(CONFIG_ENC424J600) += enc424j600.o
obj-$(CONFIG_ETHOC) += ethoc.o
obj-$(CONFIG_XTENSA_XT2000_SONIC) += xtsonic.o
^ permalink raw reply
* Re: inbound connection problems when "netlink: test for all flags of the NLM_F_DUMP composite" commit applied
From: Jan Engelhardt @ 2011-01-16 10:50 UTC (permalink / raw)
To: arthur.marsh
Cc: Linux Networking Developer Mailing List, Eric Dumazet,
Pablo Neira Ayuso
In-Reply-To: <1295169670.3977.36.camel@edumazet-laptop>
Le dimanche 16 janvier 2011 à 19:24 +1030, Arthur Marsh a écrit :
>
>>With kernels up to and including 2.6.37-git7, inbound telnetd-ssl
>>connections worked fine. With kernel 2.6.37-git9 and later inbound
>>telnetd-ssl connections failed, and on machine shut-down, there
>>were warning messages about daemons not return status.
Which daemons are these? For reference, what distro do you happen
to use?
>> commit 0ab03c2b1478f2438d2c80204f7fef65b1bca9cf
>> netlink: test for all flags of the NLM_F_DUMP composite
Each of the hunks in this commit is independent of another.
Would you mind bisecting these too?
^ permalink raw reply
* Re: inbound connection problems when "netlink: test for all flags of the NLM_F_DUMP composite" commit applied
From: Eric Dumazet @ 2011-01-16 9:21 UTC (permalink / raw)
To: arthur.marsh; +Cc: netdev, Jan Engelhardt, Pablo Neira Ayuso
In-Reply-To: <54347.1295168081@internode.on.net>
Le dimanche 16 janvier 2011 à 19:24 +1030, Arthur Marsh a écrit :
CC people involved with the commit
>
>
> This bug was originally posted at https://bugzilla.kernel.org/show_bug.cgi?id=26632
>
> With kernels up to and including 2.6.37-git7, inbound telnetd-ssl connections worked fine.
> With kernel 2.6.37-git9 and later inbound telnetd-ssl connections failed, and on machine shut-down, there were warning messages about daemons not return status.
>
> A git bisect on Linus' kernel tree revealed:
>
> 0ab03c2b1478f2438d2c80204f7fef65b1bca9cf is the first bad commit
> commit 0ab03c2b1478f2438d2c80204f7fef65b1bca9cf
> Author: Jan Engelhardt <jengelh@medozas.de>
> Date: Fri Jan 7 03:15:05 2011 +0000
>
> netlink: test for all flags of the NLM_F_DUMP composite
>
> Due to NLM_F_DUMP is composed of two bits, NLM_F_ROOT | NLM_F_MATCH,
> when doing "if (x & NLM_F_DUMP)", it tests for _either_ of the bits
> being set. Because NLM_F_MATCH's value overlaps with NLM_F_EXCL,
> non-dump requests with NLM_F_EXCL set are mistaken as dump requests.
>
> Substitute the condition to test for _all_ bits being set.
>
> Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
> Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
> Signed-off-by: David S. Miller <davem@davemloft.net>
>
> :040000 040000 1a0717ab0c87787309c3c3af88d666b44f327f64
> cba6279de85b7ebeaf21f19f1d93b59468fdd01d M net
>
> I tried git cherry-pick 0ab03c2b1478f2438d2c80204f7fef65b1bca9cf and verified
> that the resulting kernel had these problems, then git revert
> 0ab03c2b1478f2438d2c80204f7fef65b1bca9cf and verified that the resulting kernel
> did *not* have problems.
>
> Arthur.
^ permalink raw reply
* inbound connection problems when "netlink: test for all flags of the NLM_F_DUMP composite" commit applied
From: Arthur Marsh @ 2011-01-16 8:54 UTC (permalink / raw)
To: netdev
This bug was originally posted at https://bugzilla.kernel.org/show_bug.cgi?id=26632
With kernels up to and including 2.6.37-git7, inbound telnetd-ssl connections worked fine.
With kernel 2.6.37-git9 and later inbound telnetd-ssl connections failed, and on machine shut-down, there were warning messages about daemons not return status.
A git bisect on Linus' kernel tree revealed:
0ab03c2b1478f2438d2c80204f7fef65b1bca9cf is the first bad commit
commit 0ab03c2b1478f2438d2c80204f7fef65b1bca9cf
Author: Jan Engelhardt <jengelh@medozas.de>
Date: Fri Jan 7 03:15:05 2011 +0000
netlink: test for all flags of the NLM_F_DUMP composite
Due to NLM_F_DUMP is composed of two bits, NLM_F_ROOT | NLM_F_MATCH,
when doing "if (x & NLM_F_DUMP)", it tests for _either_ of the bits
being set. Because NLM_F_MATCH's value overlaps with NLM_F_EXCL,
non-dump requests with NLM_F_EXCL set are mistaken as dump requests.
Substitute the condition to test for _all_ bits being set.
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
:040000 040000 1a0717ab0c87787309c3c3af88d666b44f327f64
cba6279de85b7ebeaf21f19f1d93b59468fdd01d M net
I tried git cherry-pick 0ab03c2b1478f2438d2c80204f7fef65b1bca9cf and verified
that the resulting kernel had these problems, then git revert
0ab03c2b1478f2438d2c80204f7fef65b1bca9cf and verified that the resulting kernel
did *not* have problems.
Arthur.
^ permalink raw reply
* Re: Linux IPv6 router table size.
From: Eric Dumazet @ 2011-01-16 8:44 UTC (permalink / raw)
To: Jan Hugo Prins; +Cc: netdev
In-Reply-To: <4D320D90.3090005@jhprins.org>
Le samedi 15 janvier 2011 à 22:11 +0100, Jan Hugo Prins a écrit :
> Hi netdev kernel developers,
>
> In the beginning of December the number of IPv6 routes in the BPG router
> tables got somewhere close to 4096 and this number is somewhat magical
> in Linux. Why is it magical? Well, the default setting for
> net.ipv6.route.max_size is hardcoded in the linux kernel to be exactly
> this number, this in contradiction with the IPv4 net.ipv4.route.max_size
> which is set based upon the size of your memory. Actually, in the IPv4
> part of the kernel sources their is a route.c with a nice formula
> telling the kernel how big this number should be. For IPv6 their is also
> a route.c with some nice formula in it, the formula says exactly the
> following:
> net->ipv6.sysctl.ip6_rt_max_size = 4096;
>
> The result of all this magic was that when the BGP RIB in my quagga
> routers went over the 4096 routes, quagga started complaining that it
> couldn't put the routes in the kernel FIB anymore and this went all into
> syslog.
>
> It took some digging to find the reason for these error messages, but
> after changing this sysctl to something more useful, everything was fine
> again.
>
> Maybe it is a good idea to change this in the IPv6 tree to something
> more useful in the same direction of the solution that is in the IPv4 tree.
>
Hi
IPv4 does an auto memsize tuning because it uses a hash table, and this
table cant be resized after boot.
IPv6 is different, and you can change
/proc/sys/net/ipv6/route/gc_thresh & /proc/sys/net/ipv6/route/max_size
whithout downsides.
echo 32768 >/proc/sys/net/ipv6/route/max_size
echo 8192 >/proc/sys/net/ipv6/route/gc_thresh
(or equivalent lines in /etc/sysctl.conf)
We probably could change default values, but they are "not hardcoded" ;)
^ permalink raw reply
* Re: [PATCH net-next 0/8] vmxnet3 fixes and enhancements
From: David Miller @ 2011-01-16 5:21 UTC (permalink / raw)
To: sbhatewara; +Cc: netdev, linux-kernel, pv-drivers
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
From: Shreyas N Bhatewara <sbhatewara@vmware.com>
Date: Fri, 14 Jan 2011 16:59:20 -0800
> The following series fixes bugs and enhances functionality in the
> vmxnet3 driver.
>
> ---
>
> Shreyas N Bhatewara (8):
> vmxnet3: fix ring size update
> vmxnet3: Preserve the MAC address configured by ifconfig
> vmxnet3: Enable HW Rx VLAN stripping by default
> vmxnet3: Provide required number of bytes in first SG buffer
> vmxnet3: Make ethtool handlers multiqueue aware
> vmxnet3: Disable napi in suspend, reenable in resume.
> vmxnet3: Add locking for access to command register
> vmxnet3: Dont allocate extra MSI-x vectors
All applied, thanks.
^ permalink raw reply
* Re: [patch] caif: checking the wrong variable
From: David Miller @ 2011-01-16 5:05 UTC (permalink / raw)
To: sjurbren; +Cc: error27, netdev, kernel-janitors
In-Reply-To: <AANLkTimyZQ1BEJ=tPK4LrYWhQaGd+xhYUsVEENibEVoU@mail.gmail.com>
From: Sjur Brændeland <sjurbren@gmail.com>
Date: Sat, 15 Jan 2011 15:03:31 +0100
>> In the original code we check if (servl == NULL) twice. The first time
>> should print the message that cfmuxl_remove_uplayer() failed and set
>> "ret" correctly, but instead it just returns success. The second check
>> should be checking the value of "ret" instead of "servl".
>>
>> Signed-off-by: Dan Carpenter <error27@gmail.com>
>
> Thank you for spotting and correcting this.
> Looks good to me (reviewed only)
>
> Acked-by: Sjur Braendeland <sjur.brandeland@stericsson.com>
Applied, thanks.
^ permalink raw reply
* Re: [PATCH v2] can: test size of struct sockaddr in sendmsg
From: David Miller @ 2011-01-16 4:56 UTC (permalink / raw)
To: kurt.van.dijck; +Cc: netdev, socketcan-core, socketcan
In-Reply-To: <20110115193916.GC463@e-circ.dyndns.org>
From: Kurt Van Dijck <kurt.van.dijck@eia.be>
Date: Sat, 15 Jan 2011 20:39:16 +0100
> This patch makes the CAN socket code conform to the manpage of sendmsg.
>
> Signed-off-by: Kurt Van Dijck <kurt.van.dijck@eia.be>
> Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
Applied, thanks.
^ permalink raw reply
* Re: [patch] 9p: fix min_t() casting
From: David Miller @ 2011-01-16 4:52 UTC (permalink / raw)
To: error27; +Cc: ericvh, sripathik, jvrao, aneesh.kumar, netdev, kernel-janitors
In-Reply-To: <20110115203539.GF2721@bicker>
From: Dan Carpenter <error27@gmail.com>
Date: Sat, 15 Jan 2011 23:35:39 +0300
> The intent here was to cap the length to USHRT_MAX, but what the
> code actually does is it just casts the return from strlen() to
> unsigned short and truncates the significant bits away.
>
> Signed-off-by: Dan Carpenter <error27@gmail.com>
If you want me to apply this, it doesn't apply cleanly to net-2.6
at all.
^ permalink raw reply
* Re: pull request: batman-adv 2011-01-16
From: David Miller @ 2011-01-16 4:48 UTC (permalink / raw)
To: sven-KaDOiPu9UxWEi8DpZVb4nw
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
b.a.t.m.a.n-ZwoEplunGu2X36UT3dwllkB+6BGkLq7r
In-Reply-To: <1295145527-17537-1-git-send-email-sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
From: Sven Eckelmann <sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
Date: Sun, 16 Jan 2011 03:38:45 +0100
> The following changes since commit 53320fe3bb1b1eef1aaff8dd47aae530ebeeb1e5:
>
> batman-adv: Return hna count on local buffer fill (2010-12-20 10:32:03 -0800)
>
> are available in the git repository at:
> git://git.open-mesh.org/ecsv/linux-merge.git for-david
Pulled, thanks Sven.
^ permalink raw reply
* Re: [patch 2/2] [PATCH] qeth: l3 hw tx csum circumvent hw bug
From: David Miller @ 2011-01-16 4:46 UTC (permalink / raw)
To: frank.blaschka; +Cc: netdev, linux-s390
In-Reply-To: <20110113082359.GA11455@tuxmaker.boeblingen.de.ibm.com>
From: Frank Blaschka <frank.blaschka@de.ibm.com>
Date: Thu, 13 Jan 2011 09:23:59 +0100
> On Wed, Jan 12, 2011 at 11:47:35PM -0800, David Miller wrote:
>> From: frank.blaschka@de.ibm.com
>> Date: Thu, 13 Jan 2011 07:42:25 +0100
>>
>> > --- a/drivers/s390/net/qeth_l3_main.c
>> > +++ b/drivers/s390/net/qeth_l3_main.c
>> > @@ -2998,7 +2998,9 @@ static inline void qeth_l3_hdr_csum(stru
>> > */
>> > if (iph->protocol == IPPROTO_UDP)
>> > hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_UDP;
>> > - hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ;
>> > + hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ |
>> > + QETH_HDR_EXT_CSUM_HDR_REQ;
>> > + iph->check = 0;
>> > if (card->options.performance_stats)
>> > card->perf_stats.tx_csum++;
>> > }
>>
>> You may not change the packet header contents blindly like this.
>> Otherwise unpredictable contents will be seen by tcpdump and any
>> other code path which has a clone of this packet.
>>
>> Thus, you'll need to guard this change with something like:
>>
>> if (skb_header_cloned(skb) &&
>> pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
>> dev_kfree_skb(skb);
>> goto tx_fail;
>> }
> Yes I know. Because of the suboptimal l3 driver design :-) we already have
> a private copy of the skb at this place. Thx!
I see, thanks for explaining.
Both patches applied, thanks.
^ permalink raw reply
* [PATCH 2/2] batman-adv: Use "__attribute__" shortcut macros
From: Sven Eckelmann @ 2011-01-16 2:38 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
b.a.t.m.a.n-ZwoEplunGu2X36UT3dwllkB+6BGkLq7r
In-Reply-To: <1295145527-17537-1-git-send-email-sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
Linux 2.6.21 defines different macros for __attribute__ which are also
used inside batman-adv. The next version of checkpatch.pl warns about
the usage of __attribute__((packed))).
Linux 2.6.33 defines an extra macro __always_unused which is used to
assist source code analyzers and can be used to removed the last
existing __attribute__ inside the source code.
Signed-off-by: Sven Eckelmann <sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
---
net/batman-adv/main.h | 6 +++---
net/batman-adv/packet.h | 14 +++++++-------
net/batman-adv/types.h | 4 ++--
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index d4d9926..65106fb 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -151,9 +151,9 @@ int debug_log(struct bat_priv *bat_priv, char *fmt, ...);
} \
while (0)
#else /* !CONFIG_BATMAN_ADV_DEBUG */
-static inline void bat_dbg(char type __attribute__((unused)),
- struct bat_priv *bat_priv __attribute__((unused)),
- char *fmt __attribute__((unused)), ...)
+static inline void bat_dbg(char type __always_unused,
+ struct bat_priv *bat_priv __always_unused,
+ char *fmt __always_unused, ...)
{
}
#endif
diff --git a/net/batman-adv/packet.h b/net/batman-adv/packet.h
index b49fdf7..2284e81 100644
--- a/net/batman-adv/packet.h
+++ b/net/batman-adv/packet.h
@@ -63,7 +63,7 @@ struct batman_packet {
uint8_t num_hna;
uint8_t gw_flags; /* flags related to gateway class */
uint8_t align;
-} __attribute__((packed));
+} __packed;
#define BAT_PACKET_LEN sizeof(struct batman_packet)
@@ -76,7 +76,7 @@ struct icmp_packet {
uint8_t orig[6];
uint16_t seqno;
uint8_t uid;
-} __attribute__((packed));
+} __packed;
#define BAT_RR_LEN 16
@@ -93,14 +93,14 @@ struct icmp_packet_rr {
uint8_t uid;
uint8_t rr_cur;
uint8_t rr[BAT_RR_LEN][ETH_ALEN];
-} __attribute__((packed));
+} __packed;
struct unicast_packet {
uint8_t packet_type;
uint8_t version; /* batman version field */
uint8_t dest[6];
uint8_t ttl;
-} __attribute__((packed));
+} __packed;
struct unicast_frag_packet {
uint8_t packet_type;
@@ -110,7 +110,7 @@ struct unicast_frag_packet {
uint8_t flags;
uint8_t orig[6];
uint16_t seqno;
-} __attribute__((packed));
+} __packed;
struct bcast_packet {
uint8_t packet_type;
@@ -118,7 +118,7 @@ struct bcast_packet {
uint8_t orig[6];
uint8_t ttl;
uint32_t seqno;
-} __attribute__((packed));
+} __packed;
struct vis_packet {
uint8_t packet_type;
@@ -131,6 +131,6 @@ struct vis_packet {
* neighbors */
uint8_t target_orig[6]; /* who should receive this packet */
uint8_t sender_orig[6]; /* who sent or rebroadcasted this packet */
-} __attribute__((packed));
+} __packed;
#endif /* _NET_BATMAN_ADV_PACKET_H_ */
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index 97cb23d..bf3f6f5 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -246,13 +246,13 @@ struct vis_info {
/* this packet might be part of the vis send queue. */
struct sk_buff *skb_packet;
/* vis_info may follow here*/
-} __attribute__((packed));
+} __packed;
struct vis_info_entry {
uint8_t src[ETH_ALEN];
uint8_t dest[ETH_ALEN];
uint8_t quality; /* quality = 0 means HNA */
-} __attribute__((packed));
+} __packed;
struct recvlist_node {
struct list_head list;
--
1.7.2.3
^ permalink raw reply related
* [PATCH 1/2] batman-adv: Even Batman should not dereference NULL pointers
From: Sven Eckelmann @ 2011-01-16 2:38 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
b.a.t.m.a.n-ZwoEplunGu2X36UT3dwllkB+6BGkLq7r, Jesper Juhl
In-Reply-To: <1295145527-17537-1-git-send-email-sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
From: Jesper Juhl <jj-IYz4IdjRLj0sV2N9l4h3zg@public.gmane.org>
There's a problem in net/batman-adv/unicast.c::frag_send_skb().
dev_alloc_skb() allocates memory and may fail, thus returning NULL. If
this happens we'll pass a NULL pointer on to skb_split() which in turn
hands it to skb_split_inside_header() from where it gets passed to
skb_put() that lets skb_tail_pointer() play with it and that function
dereferences it. And thus the bat dies.
While I was at it I also moved the call to dev_alloc_skb() above the
assignment to 'unicast_packet' since there's no reason to do that
assignment if the memory allocation fails.
Signed-off-by: Jesper Juhl <jj-IYz4IdjRLj0sV2N9l4h3zg@public.gmane.org>
Signed-off-by: Sven Eckelmann <sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
---
net/batman-adv/unicast.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c
index dc2e28b..ee41fef 100644
--- a/net/batman-adv/unicast.c
+++ b/net/batman-adv/unicast.c
@@ -229,10 +229,12 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv,
if (!bat_priv->primary_if)
goto dropped;
- unicast_packet = (struct unicast_packet *) skb->data;
+ frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len);
+ if (!frag_skb)
+ goto dropped;
+ unicast_packet = (struct unicast_packet *) skb->data;
memcpy(&tmp_uc, unicast_packet, uc_hdr_len);
- frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len);
skb_split(skb, frag_skb, data_len / 2);
if (my_skb_head_push(skb, ucf_hdr_len - uc_hdr_len) < 0 ||
--
1.7.2.3
^ permalink raw reply related
* pull request: batman-adv 2011-01-16
From: Sven Eckelmann @ 2011-01-16 2:38 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
b.a.t.m.a.n-ZwoEplunGu2X36UT3dwllkB+6BGkLq7r
Hi,
i would propose some smaller corrections.
The following changes since commit 53320fe3bb1b1eef1aaff8dd47aae530ebeeb1e5:
batman-adv: Return hna count on local buffer fill (2010-12-20 10:32:03 -0800)
are available in the git repository at:
git://git.open-mesh.org/ecsv/linux-merge.git for-david
Jesper Juhl (1):
batman-adv: Even Batman should not dereference NULL pointers
Sven Eckelmann (1):
batman-adv: Use "__attribute__" shortcut macros
net/batman-adv/main.h | 6 +++---
net/batman-adv/packet.h | 14 +++++++-------
net/batman-adv/types.h | 4 ++--
net/batman-adv/unicast.c | 6 ++++--
4 files changed, 16 insertions(+), 14 deletions(-)
^ permalink raw reply
* Re: [PATCH] tlan: Use pr_fmt, pr_<level> and netdev_<level>, remove changelog
From: Sakari Ailus @ 2011-01-13 6:19 UTC (permalink / raw)
To: David Miller; +Cc: joe, netdev, chessman, bhutchings
In-Reply-To: <20110109.233950.71582613.davem@davemloft.net>
Hi David,
On Sun, Jan 09, 2011 at 11:39:50PM -0800, David Miller wrote:
> From: Joe Perches <joe@perches.com>
> Date: Thu, 06 Jan 2011 14:48:08 -0800
>
> > Neatening and standardization to the standard logging mechanisms.
> > The changelog isn't useful anymore.
> > Miscellaneous speen/speed typo correction.
> >
> > Signed-off-by: Joe Perches <joe@perches.com>
>
> This patch didn't apply cleanly to the current sources.
>
> And anyways, please resubmit this once 2.6.38-rc1 is out and I
> start taking net-next-2.6 patches again.
Joe's patch applies on top of my patchset "tlan improvements" which contains
a largish code cleanup for the tlan driver. I got comments on that from Ben
Hutchings and haven't sent a new patchset yet.
Instead of fixing partner capability printout I'm removing it since the same
information is available under the mii-tool interface. Ben notified, quite
rightly, that the tlan should be using ethtool interface. That looks like a
topic for another patchset, though.
Regards,
--
Sakari Ailus
sakari dot ailus at iki dot fi
^ permalink raw reply
* Linux IPv6 router table size.
From: Jan Hugo Prins @ 2011-01-15 21:11 UTC (permalink / raw)
To: netdev
Hi netdev kernel developers,
In the beginning of December the number of IPv6 routes in the BPG router
tables got somewhere close to 4096 and this number is somewhat magical
in Linux. Why is it magical? Well, the default setting for
net.ipv6.route.max_size is hardcoded in the linux kernel to be exactly
this number, this in contradiction with the IPv4 net.ipv4.route.max_size
which is set based upon the size of your memory. Actually, in the IPv4
part of the kernel sources their is a route.c with a nice formula
telling the kernel how big this number should be. For IPv6 their is also
a route.c with some nice formula in it, the formula says exactly the
following:
net->ipv6.sysctl.ip6_rt_max_size = 4096;
The result of all this magic was that when the BGP RIB in my quagga
routers went over the 4096 routes, quagga started complaining that it
couldn't put the routes in the kernel FIB anymore and this went all into
syslog.
It took some digging to find the reason for these error messages, but
after changing this sysctl to something more useful, everything was fine
again.
Maybe it is a good idea to change this in the IPv6 tree to something
more useful in the same direction of the solution that is in the IPv4 tree.
Greetings,
Jan Hugo Prins
^ permalink raw reply
* [patch] 9p: fix min_t() casting
From: Dan Carpenter @ 2011-01-15 20:35 UTC (permalink / raw)
To: Eric Van Hensbergen
Cc: David S. Miller, Sripathi Kodi, Venkateswararao Jujjuri,
Aneesh Kumar K.V, netdev, kernel-janitors
The intent here was to cap the length to USHRT_MAX, but what the
code actually does is it just casts the return from strlen() to
unsigned short and truncates the significant bits away.
Signed-off-by: Dan Carpenter <error27@gmail.com>
diff --git a/net/9p/protocol.c b/net/9p/protocol.c
index 1e308f2..0422581 100644
--- a/net/9p/protocol.c
+++ b/net/9p/protocol.c
@@ -403,7 +403,7 @@ p9pdu_vwritef(struct p9_fcall *pdu, int proto_version, const char *fmt,
const char *sptr = va_arg(ap, const char *);
uint16_t len = 0;
if (sptr)
- len = min_t(uint16_t, strlen(sptr),
+ len = min_t(size_t, strlen(sptr),
USHRT_MAX);
errcode = p9pdu_writef(pdu, proto_version,
^ permalink raw reply related
* [PATCH v2] can: test size of struct sockaddr in sendmsg
From: Kurt Van Dijck @ 2011-01-15 19:39 UTC (permalink / raw)
To: netdev-u79uwXL29TY76Z2rM5mHXA,
socketcan-core-0fE9KPoRgkgATYTw5x5z8w, Oliver Hartkopp
This patch makes the CAN socket code conform to the manpage of sendmsg.
Signed-off-by: Kurt Van Dijck <kurt.van.dijck-/BeEPy95v10@public.gmane.org>
Acked-by: Oliver Hartkopp <socketcan-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
---
net/can/bcm.c | 3 +++
net/can/raw.c | 3 +++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/net/can/bcm.c b/net/can/bcm.c
index 6faa825..2f804e4 100644
--- a/net/can/bcm.c
+++ b/net/can/bcm.c
@@ -1256,6 +1256,9 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock,
struct sockaddr_can *addr =
(struct sockaddr_can *)msg->msg_name;
+ if (msg->msg_namelen < sizeof(*addr))
+ return -EINVAL;
+
if (addr->can_family != AF_CAN)
return -EINVAL;
diff --git a/net/can/raw.c b/net/can/raw.c
index e88f610..883e9d7 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -649,6 +649,9 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
struct sockaddr_can *addr =
(struct sockaddr_can *)msg->msg_name;
+ if (msg->msg_namelen < sizeof(*addr))
+ return -EINVAL;
+
if (addr->can_family != AF_CAN)
return -EINVAL;
^ permalink raw reply related
* Re: [PATCH] can: test size of struct sockaddr
From: Kurt Van Dijck @ 2011-01-15 19:35 UTC (permalink / raw)
To: Oliver Hartkopp
Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <4D31D4A6.4040701-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
On Sat, Jan 15, 2011 at 06:08:54PM +0100, Oliver Hartkopp wrote:
> On 14.01.2011 18:23, Kurt Van Dijck wrote:
> > I think this patch makes the CAN socket code comform to the
> > manpages of sendmsg & recvmsg.
>
> Hello Kurt,
>
> if you check similar code sniplets in the kernel you would see, that in
> recvmsg()-cases the given namelen is not used from userspace.
I went into udp code, but my mind got troubled there.
>
> If msg->msg_name is not NULL the msg_namelen is just set by the kernel. E.g.
> see af_packet.c, af_econet.c, etc.
I should have looked further ...
Given this, I went up to net/socket.c:__sys_recvmsg.
Within kernel space, a struct sockaddr_storage is used in fact ....
This solves indeed the problem I was trying to address.
>
> So the code in candump.c setting the msg_namelen before recvmsg() is obviously
> obsolete ...
I think no, since after the socket's recvmsg() has been called,
since move_addr_to_user() will do checks similar as I tried to reimplement.
>
> Btw. your two patches below for bcm_sendmsg() and raw_sendmesg() look good.
>
> If you would like to resubmit these two patches, you may add my Acked-by
Thanks, I will do so.
Kurt
^ permalink raw reply
* NETLINK: Failed to browse: Invalid argument from avahi-daemon in F14 since 2.6.37-git8
From: Alessandro Suardi @ 2011-01-15 18:34 UTC (permalink / raw)
To: linux-kernel, netdev
/var/log/messages says:
Jan 13 12:42:02 duff avahi-daemon[2771]: Found user 'avahi' (UID 70)
and group 'avahi' (GID 70).
Jan 13 12:42:02 duff avahi-daemon[2771]: Successfully dropped root privileges.
Jan 13 12:42:02 duff avahi-daemon[2771]: avahi-daemon 0.6.27 starting up.
Jan 13 12:42:02 duff avahi-daemon[2771]: Successfully called chroot().
Jan 13 12:42:02 duff avahi-daemon[2771]: Successfully dropped
remaining capabilities.
Jan 13 12:42:02 duff avahi-daemon[2771]: Loading service file
/services/ssh.service.
Jan 13 12:42:02 duff avahi-daemon[2771]: Loading service file
/services/udisks.service.
Jan 13 12:42:02 duff avahi-daemon[2771]: NETLINK: Failed to browse:
Invalid argument
Jan 13 12:42:23 duff acpid: starting up with netlink and the input layer
Happens both at boot and after boot if restarting avahi-daemon service,
and there is a 10-15" wait before the service start script prints a [FAILED]
red tag; avahi-daemon process does start up anyways.
-git7 is the latest "good" kernel
-git8, -git9, -git11, -git13 have been reproducing the issue
thanks, ciao,
--alessandro
"There's always a siren singing you to shipwreck"
(Radiohead, "There There")
^ permalink raw reply
* Re: [2.6.37 vanilla] PC freezing, call stack pointing at net/sched/sch_generic.c
From: Joe Perches @ 2011-01-15 17:38 UTC (permalink / raw)
To: David Robin; +Cc: netdev, LKML
In-Reply-To: <AANLkTimrP5Mqg340SwHrvdn=4KkvRchOjoy3-_f-9UJg@mail.gmail.com>
On Sat, 2011-01-15 at 14:49 +0100, David Robin wrote:
> Hello,
>
> As I noticed you are one of the latest forcedeth contributers, I take
> the opportunity to report you this series of errors in forcedeth
> driver, which caused my desktop PC to freeze, in a reproducable way.
>
> I am running Debian testing on a nForce4-based motheboard, and an AMD
> Athlon X2 Dual Core Processor 4200+.
> The stock 2.6.32-5 kernel package is running perfectly fine, whereas
> 2.6.37 kernel image I compiled is freezing after 1 or 2 days of
> uptime.
>
> Unfortunately, I have tried to compile intermediate versions of Linux
> kernel to try and identify the period when the issue was introduced.
Try git-bisect.
http://www.reactivated.net/weblog/archives/2006/01/using-git-bisect-to-find-buggy-kernel-patches/
Here's a list of the changelog since 2.6.32
------------------
$ git shortlog v2.6.32..v2.6.37 -- drivers/net/forcedeth.c
Alexey Dobriyan (1):
drivers/net/: use DEFINE_PCI_DEVICE_TABLE()
Ayaz Abdulla (1):
forcedeth: fix tx limit2 flag check
David S. Miller (3):
Merge branch 'master' of master.kernel.org:/.../davem/net-2.6
Merge branch 'master' of master.kernel.org:/.../davem/net-2.6
forcedeth: Kill NAPI config options.
Eric Dumazet (3):
drivers: net: use skb_headlen()
net: trans_start cleanups
drivers/net: return operator cleanup
Jesse Gross (1):
vlan: Don't check for vlan group before vlan_tx_tag_present.
Jiri Pirko (2):
net: convert multiple drivers to use netdev_for_each_mc_addr, part4
net: convert multicast list to list_head
Joe Perches (2):
drivers/net: request_irq - Remove unnecessary leading & from second arg
drivers/net: Remove address use from assignments of function pointers
Julia Lawall (1):
forcedeth: correct valid flag
Mike Ditto (1):
forcedeth: Fix different hardware statistics versions.
Tejun Heo (1):
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit s
Tom Herbert (2):
forcedeth: GRO support
forcedeth: Account for consumed budget in napi poll
stephen hemminger (1):
forcedeth: Stay in NAPI as long as there's work
------------------
Based only on the changelog, I'd guess it might be the NAPI change
and some hardware issue, but who really knows.
git bisect should help figure that out.
> Are you the right person I should report this error too,
No.
You should report this to linux-kernel@vger.kernel.org
and to netdev@vger.kernel.org
I added them to the cc's on this reply.
> and is there more debug information I could provide ?
Not really, other than it'd really help if you could
run the git bisect.
David Robin's original attachment:
----------------------
Jan 14 01:50:02 gizeh kernel: [13653.828013] ------------[ cut here ]------------
Jan 14 01:50:02 gizeh kernel: [13653.828023] WARNING: at net/sched/sch_generic.c:258 dev_watchdog+0xfc/0x1a2()
Jan 14 01:50:02 gizeh kernel: [13653.828026] Hardware name: MS-7125
Jan 14 01:50:02 gizeh kernel: [13653.828029] NETDEV WATCHDOG: eth1 (forcedeth): transmit queue 0 timed out
Jan 14 01:50:02 gizeh kernel: [13653.828031] Modules linked in: radeon ttm drm_kms_helper drm i2c_algo_bit fuse loop firewire_sbp2 usbhid hid arc4 ecb option usb_wwan usbserial ath5k ath snd_hda_codec_hdmi sg snd_hda_intel ohci_hcd sr_mod cdrom mac80211 firewire_ohci ehci_hcd i2c_nforce2 usbcore snd_hda_codec cfg80211 snd_intel8x0 firewire_core k8temp parport_pc sata_sil pata_amd sky2 rfkill snd_hwdep i2c_core parport snd_ac97_codec pcspkr shpchp evdev forcedeth ac97_bus nls_base snd_pcm snd_timer snd tpm_tis tpm tpm_bios soundcore processor button edac_core pci_hotplug crc_itu_t snd_page_alloc edac_mce_amd ext3 jbd mbcache sd_mod crc_t10dif sata_nv ata_generic libata scsi_mod thermal fan thermal_sys
Jan 14 01:50:02 gizeh kernel: [13653.828085] Pid: 2096, comm: Xorg Not tainted 2.6.37 #1
Jan 14 01:50:02 gizeh kernel: [13653.828087] Call Trace:
Jan 14 01:50:02 gizeh kernel: [13653.828090] <IRQ> [<ffffffff8103bc50>] ? warn_slowpath_common+0x78/0x8c
Jan 14 01:50:02 gizeh kernel: [13653.828099] [<ffffffff8103bd03>] ? warn_slowpath_fmt+0x45/0x4a
Jan 14 01:50:02 gizeh kernel: [13653.828103] [<ffffffff8125ce41>] ? netif_tx_lock+0x3d/0x65
Jan 14 01:50:02 gizeh kernel: [13653.828106] [<ffffffff8125cf65>] ? dev_watchdog+0xfc/0x1a2
Jan 14 01:50:02 gizeh kernel: [13653.828111] [<ffffffff8104fa7c>] ? __queue_work+0x22d/0x251
Jan 14 01:50:02 gizeh kernel: [13653.828116] [<ffffffff81047c33>] ? run_timer_softirq+0x1c2/0x285
Jan 14 01:50:02 gizeh kernel: [13653.828119] [<ffffffff8125ce69>] ? dev_watchdog+0x0/0x1a2
Jan 14 01:50:02 gizeh kernel: [13653.828124] [<ffffffff8105c45e>] ? ktime_get+0x5f/0xb8
Jan 14 01:50:02 gizeh kernel: [13653.828127] [<ffffffff81041552>] ? __do_softirq+0xc9/0x1ab
Jan 14 01:50:02 gizeh kernel: [13653.828131] [<ffffffff8100388c>] ? call_softirq+0x1c/0x28
Jan 14 01:50:02 gizeh kernel: [13653.828134] [<ffffffff81004ca5>] ? do_softirq+0x31/0x63
Jan 14 01:50:02 gizeh kernel: [13653.828137] [<ffffffff810413f0>] ? irq_exit+0x36/0x79
Jan 14 01:50:02 gizeh kernel: [13653.828142] [<ffffffff81018d72>] ? smp_apic_timer_interrupt+0x87/0x94
Jan 14 01:50:02 gizeh kernel: [13653.828146] [<ffffffff81003353>] ? apic_timer_interrupt+0x13/0x20
Jan 14 01:50:02 gizeh kernel: [13653.828148] <EOI> [<ffffffff8118b12c>] ? delay_tsc+0x1a/0x4e
Jan 14 01:50:02 gizeh kernel: [13653.828171] [<ffffffffa0336acc>] ? radeon_freelist_get+0xd5/0xf6 [radeon]
Jan 14 01:50:02 gizeh kernel: [13653.828181] [<ffffffffa033a495>] ? radeon_cp_buffers+0xe5/0x169 [radeon]
Jan 14 01:50:02 gizeh kernel: [13653.828191] [<ffffffffa02f1e06>] ? drm_ioctl+0x26c/0x322 [drm]
Jan 14 01:50:02 gizeh kernel: [13653.828201] [<ffffffffa033a3b0>] ? radeon_cp_buffers+0x0/0x169 [radeon]
Jan 14 01:50:02 gizeh kernel: [13653.828205] [<ffffffff81002497>] ? do_signal+0x584/0x68a
Jan 14 01:50:02 gizeh kernel: [13653.828209] [<ffffffff810f0ea4>] ? do_vfs_ioctl+0x4a2/0x4ef
Jan 14 01:50:02 gizeh kernel: [13653.828213] [<ffffffff8100a7a8>] ? restore_i387_xstate+0x61/0x139
Jan 14 01:50:02 gizeh kernel: [13653.828216] [<ffffffff8100334e>] ? apic_timer_interrupt+0xe/0x20
Jan 14 01:50:02 gizeh kernel: [13653.828220] [<ffffffff810f0f3c>] ? sys_ioctl+0x4b/0x6f
Jan 14 01:50:02 gizeh kernel: [13653.828223] [<ffffffff810029bb>] ? system_call_fastpath+0x16/0x1b
Jan 14 01:50:02 gizeh kernel: [13653.828226] ---[ end trace 119f4557b810af02 ]---
Jan 14 01:50:02 gizeh kernel: [13653.828229] eth1: Got tx_timeout. irq: 00000036
Jan 14 01:50:02 gizeh kernel: [13653.828231] eth1: Ring at 12a73c000
Jan 14 01:50:02 gizeh kernel: [13653.828233] eth1: Dumping tx registers
Jan 14 01:50:02 gizeh kernel: [13653.828238] 0: 00000036 00000000 00000003 0000000d 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828243] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828249] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828254] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828260] 80: 003b0f3c 00000001 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 01:50:02 gizeh kernel: [13653.828265] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 01:50:02 gizeh kernel: [13653.828271] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 01:50:02 gizeh kernel: [13653.828276] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 01:50:02 gizeh kernel: [13653.828282] 100: 2a73e000 2a73c000 01ff00ff 00008000 00010064 00000000 00000024 2a73e500
Jan 14 01:50:02 gizeh kernel: [13653.828287] 120: 2a73d4c0 bf435380 a000ffde 117bf040 8000061c 2a73e50c 2a73d374 01e08000
Jan 14 01:50:02 gizeh kernel: [13653.828293] 140: 00304120 80002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828298] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828304] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828309] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828315] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828320] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828326] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828331] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828336] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828342] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 01:50:02 gizeh kernel: [13653.828347] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828352] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828358] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 01:50:02 gizeh kernel: [13653.828360] eth1: Dumping tx ring
Jan 14 01:50:02 gizeh kernel: [13653.828364] 000: 00000000 b7267402 20000029 // 00000000 b7267602 20000029 // 00000000 b7267802 20000029 // 00000000 b7267a02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828370] 004: 00000000 b7267c02 20000029 // 00000000 b7267e02 20000029 // 00000001 2498b202 20000029 // 00000001 2498aa02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828375] 008: 00000000 b736c002 20000029 // 00000000 b736c202 20000029 // 00000000 b736c402 20000029 // 00000000 b736c602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828380] 00c: 00000000 b736c802 20000029 // 00000000 b736ca02 20000029 // 00000000 b736cc02 20000029 // 00000000 b736ce02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828385] 010: 00000000 b736d002 20000029 // 00000000 b736d202 20000029 // 00000000 b736d402 20000029 // 00000000 b736d602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828390] 014: 00000000 b736d802 20000029 // 00000000 b736da02 20000029 // 00000000 b736dc02 20000029 // 00000000 b736de02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828395] 018: 00000000 b72a2002 20000029 // 00000000 b72a2202 20000029 // 00000000 b72a2402 20000029 // 00000000 b72a2602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828400] 01c: 00000000 b72a2802 20000029 // 00000000 b72a2a02 20000029 // 00000000 b72a2c02 20000029 // 00000000 b72a2e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828405] 020: 00000000 b72a3002 20000029 // 00000000 b72a3202 20000029 // 00000000 b72a3402 20000029 // 00000000 b72a3602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828410] 024: 00000000 b72a3802 20000029 // 00000000 b72a3a02 20000029 // 00000000 b72a3c02 20000029 // 00000000 b72a3e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828415] 028: 00000000 b72a4002 20000029 // 00000000 b72a4202 20000029 // 00000000 b72a4402 20000029 // 00000000 b72a4602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828420] 02c: 00000000 b72a4802 20000029 // 00000000 b72a4a02 20000029 // 00000000 b72a4c02 20000029 // 00000000 b72a4e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828425] 030: 00000000 bf4150fa 20000040 // 00000000 bf4150ee 22000046 // 00000000 a465c8ee 22000046 // 00000001 26b710fe 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828430] 034: 00000000 b6d01374 220005ee // 00000000 a465ed0a 00000000 // 00000000 cda7562e 220005ee // 00000001 26b73d0a 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828435] 038: 00000000 bf6dfd77 00000000 // 00000000 cdac7000 220005b4 // 00000000 bf414cee 22000046 // 00000000 bf4148ee 22000046
Jan 14 01:50:02 gizeh kernel: [13653.828440] 03c: 00000000 bf415cfe 00000000 // 00000000 b6d0191c 200005ee // 00000000 bf41750a 00000000 // 00000000 cda75be2 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828445] 040: 00000000 04d69000 200005ee // 00000000 bf41650a 00000000 // 00000000 cdac72f1 220005b4 // 00000000 cd9b30fe 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828450] 044: 00000000 b6cefd94 00000000 // 00000000 b6d01000 200005ee // 00000000 b72d78ee 20000046 // 00000001 26b7150a 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828455] 048: 00000000 cda7500b 200005ee // 00000000 b72d4d0a 00000000 // 00000000 cdac786b 200005b4 // 00000000 b72d5d0a 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828460] 04c: 00000000 04cd5951 20000040 // 00000000 b72d710a 00000000 // 00000000 cdac7de5 00000000 // 00000000 bf435000 220005b4
Jan 14 01:50:02 gizeh kernel: [13653.828465] 050: 00000001 2a69e8ee 2c000041 // 00000000 a465cd0a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000001 2a55050a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828470] 054: 00000000 04cd5951 a0000004 // 00000000 a465dcfe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b
Jan 14 01:50:02 gizeh kernel: [13653.828476] 058: 00000001 26b6d8ee 2c000041 // 00000001 2613290a 0c000035 // 00000000 cda7500b a00005b3 // 00000001 2a1f150a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828481] 05c: 00000000 04cd5951 a0000004 // 00000000 b6dfb10a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000000 b6dfa4ee 2c000041
Jan 14 01:50:02 gizeh kernel: [13653.828486] 060: 00000000 a465e8fe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b // 00000000 b6df990a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828491] 064: 00000000 04cd5951 a0000004 // 00000000 b728710a 0c000035 // 00000000 cda7500b a00005b3 // 00000000 b728410a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828496] 068: 00000000 bf6df2b8 a0000579 // 00000000 b728590a 0c000035 // 00000000 04cd5951 a0000004 // 00000000 a465d4fe 0c000041
Jan 14 01:50:02 gizeh kernel: [13653.828501] 06c: 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b // 00000000 b7287d0a 0c000035 // 00000000 cda7500b a00005b3
Jan 14 01:50:02 gizeh kernel: [13653.828506] 070: 00000000 b728450a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000000 b728510a 0c000035 // 00000000 04cd5951 a0000004
Jan 14 01:50:02 gizeh kernel: [13653.828512] 074: 00000000 a465e4fe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b // 00000000 b7284d0a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828517] 078: 00000000 cda7500b a00005b3 // 00000001 26b7310a 0c000035 // 00000000 04cd5951 a0000004 // 00000001 26b7290a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828522] 07c: 00000000 bf6df2b8 a0000579 // 00000000 a465d0fe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b
Jan 14 01:50:02 gizeh kernel: [13653.828527] 080: 00000001 2f80e50a 0c000035 // 00000000 cda7500b a00005b3 // 00000001 2f80e10a 0c000035 // 00000000 04cd5951 a0000004
Jan 14 01:50:02 gizeh kernel: [13653.828532] 084: 00000001 2a48610a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000000 b72fb002 20000029 // 00000000 b72fb202 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828537] 088: 00000000 b72fb602 20000029 // 00000000 b72fba02 20000029 // 00000000 b72faa02 20000029 // 00000000 b72fa402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828542] 08c: 00000000 b72fbc02 20000029 // 00000000 b72fa002 20000029 // 00000000 b72fbe02 20000029 // 00000000 b72fae02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828547] 090: 00000000 b72fa802 20000029 // 00000000 b72fa602 20000029 // 00000001 29f47202 20000029 // 00000001 29f46402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828552] 094: 00000001 29f47602 20000029 // 00000001 29f46002 20000029 // 00000001 29f46202 20000029 // 00000001 26a2f402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828557] 098: 00000001 26a2e602 20000029 // 00000001 26a2e202 20000029 // 00000001 26a2e002 20000029 // 00000001 26a2ea02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828562] 09c: 00000001 26a2ec02 20000029 // 00000001 26a2fe02 20000029 // 00000001 26afe202 20000029 // 00000001 26afea02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828567] 0a0: 00000001 26afe402 20000029 // 00000001 26afec02 20000029 // 00000001 26affe02 20000029 // 00000001 29826402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828572] 0a4: 00000001 29826802 20000029 // 00000001 29bcbe02 20000029 // 00000001 29bca802 20000029 // 00000001 269b9c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828578] 0a8: 00000001 269b8802 20000029 // 00000001 269b9e02 20000029 // 00000001 26859e02 20000029 // 00000001 26858802 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828583] 0ac: 00000001 26859602 20000029 // 00000001 26858402 20000029 // 00000001 26859002 20000029 // 00000001 26859c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828588] 0b0: 00000001 26859202 20000029 // 00000001 26858202 20000029 // 00000001 26859402 20000029 // 00000001 26859802 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828593] 0b4: 00000001 26858c02 20000029 // 00000001 2907f402 20000029 // 00000001 24932202 20000029 // 00000001 24933e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828598] 0b8: 00000001 2a2b2202 20000029 // 00000001 2a0c1c02 20000029 // 00000001 26aff402 20000029 // 00000001 26affa02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828603] 0bc: 00000000 b7210002 20000029 // 00000000 b7210202 20000029 // 00000000 b7210402 20000029 // 00000000 b7210602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828608] 0c0: 00000000 b7210802 20000029 // 00000000 b7210a02 20000029 // 00000000 b7210c02 20000029 // 00000000 b7210e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828613] 0c4: 00000000 b7211002 20000029 // 00000000 b7211202 20000029 // 00000000 b7211402 20000029 // 00000000 b7211602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828618] 0c8: 00000000 b7211802 20000029 // 00000000 b7211a02 20000029 // 00000000 b7211c02 20000029 // 00000000 b7211e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828623] 0cc: 00000001 2a6c4a02 20000029 // 00000000 b6c26002 20000029 // 00000000 b6c26202 20000029 // 00000000 b6c26402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828628] 0d0: 00000000 b6c26602 20000029 // 00000000 b6c26802 20000029 // 00000000 b6c26a02 20000029 // 00000000 b6c26c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828633] 0d4: 00000000 b6c26e02 20000029 // 00000000 b6c27002 20000029 // 00000000 b6c27202 20000029 // 00000000 b6c27402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828638] 0d8: 00000000 b6c27602 20000029 // 00000000 b6c27802 20000029 // 00000000 b6c27a02 20000029 // 00000000 b6c27c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828643] 0dc: 00000000 b6c27e02 20000029 // 00000000 b70c0002 20000029 // 00000000 b70c0202 20000029 // 00000000 b70c0402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828648] 0e0: 00000000 b70c0602 20000029 // 00000000 b70c0802 20000029 // 00000000 b70c0a02 20000029 // 00000000 b70c0c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828653] 0e4: 00000000 b70c0e02 20000029 // 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029 // 00000000 b70c1402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828659] 0e8: 00000000 b70c1602 20000029 // 00000001 2498a202 20000029 // 00000001 2498a402 20000029 // 00000001 2498ba02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828664] 0ec: 00000000 b70c1802 20000029 // 00000000 b70c1a02 20000029 // 00000000 b70c1c02 20000029 // 00000000 b70c1e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828669] 0f0: 00000000 b7266002 20000029 // 00000000 b7266202 20000029 // 00000000 37aae002 20000029 // 00000000 37aae402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828673] 0f4: 00000000 37aae602 20000029 // 00000000 37aaea02 20000029 // 00000000 37aaec02 20000029 // 00000000 37aaee02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828678] 0f8: 00000000 b7266402 20000029 // 00000000 b7266602 20000029 // 00000000 b7266802 20000029 // 00000000 b7266a02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828683] 0fc: 00000000 b7266c02 20000029 // 00000000 b7266e02 20000029 // 00000000 b7267002 20000029 // 00000000 b7267202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828017] eth1: Got tx_timeout. irq: 00000036
Jan 14 03:10:22 gizeh kernel: [18473.828021] eth1: Ring at 12a73c000
Jan 14 03:10:22 gizeh kernel: [18473.828023] eth1: Dumping tx registers
Jan 14 03:10:22 gizeh kernel: [18473.828028] 0: 00000036 00000000 00000003 000a000d 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828034] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828039] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828045] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828050] 80: 003b0f3c 00c02601 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 03:10:22 gizeh kernel: [18473.828056] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 03:10:22 gizeh kernel: [18473.828061] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 03:10:22 gizeh kernel: [18473.828067] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 03:10:22 gizeh kernel: [18473.828072] 100: 2a73e000 2a73c000 01ff00ff 00002601 00010064 00000000 0000002a 2a73e600
Jan 14 03:10:22 gizeh kernel: [18473.828078] 120: 2a73d4c0 b72a5e40 a000ffeb 117bf040 8000061c 2a73e604 2a73d374 01e08000
Jan 14 03:10:22 gizeh kernel: [18473.828083] 140: 00304120 80002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828089] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828095] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828100] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828106] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828111] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828117] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828122] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828127] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828133] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 03:10:22 gizeh kernel: [18473.828138] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828143] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828149] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 03:10:22 gizeh kernel: [18473.828151] eth1: Dumping tx ring
Jan 14 03:10:22 gizeh kernel: [18473.828155] 000: 00000000 b736d402 20000029 // 00000000 b736d602 20000029 // 00000000 b736d802 20000029 // 00000000 b736da02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828161] 004: 00000000 b736de02 20000029 // 00000000 b736dc02 20000029 // 00000000 b734a202 20000029 // 00000000 b736c202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828166] 008: 00000000 b7210002 20000029 // 00000000 b7210402 20000029 // 00000000 b7210602 20000029 // 00000000 b7210a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828171] 00c: 00000000 b7210c02 20000029 // 00000000 b7211002 20000029 // 00000000 b7210e02 20000029 // 00000000 b7211202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828176] 010: 00000000 b7211402 20000029 // 00000000 b7211602 20000029 // 00000000 b7211802 20000029 // 00000000 b7211a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828181] 014: 00000000 b7211c02 20000029 // 00000000 b7211e02 20000029 // 00000000 b72a2202 20000029 // 00000000 b7210202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828186] 018: 00000000 b6c26002 20000029 // 00000000 b6c26402 20000029 // 00000000 b6c26802 20000029 // 00000000 b6c26a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828191] 01c: 00000000 b6c26c02 20000029 // 00000000 b6c26e02 20000029 // 00000000 b6c27002 20000029 // 00000000 b6c27202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828196] 020: 00000000 b6c27402 20000029 // 00000000 b6c27602 20000029 // 00000000 b6c27802 20000029 // 00000000 b6c27a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828201] 024: 00000000 b6c27c02 20000029 // 00000000 b6c27e02 20000029 // 00000000 b7210802 20000029 // 00000000 b6c26602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828206] 028: 00000000 b70c0002 20000029 // 00000000 b70c0602 20000029 // 00000000 b70c0802 20000029 // 00000000 b70c0a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828211] 02c: 00000000 b70c0c02 20000029 // 00000000 b70c0e02 20000029 // 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828216] 030: 00000000 b70c1402 20000029 // 00000000 b70c1602 20000029 // 00000000 b70c1a02 20000029 // 00000000 b70c1c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828221] 034: 00000000 b70c1e02 20000029 // 00000000 b736c402 20000029 // 00000000 b70c0402 20000029 // 00000000 cdb26002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828226] 038: 00000000 cdb26602 20000029 // 00000000 cdb26802 20000029 // 00000000 cdb26a02 20000029 // 00000000 cdb26c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828231] 03c: 00000000 cdb26e02 20000029 // 00000000 cdb27002 20000029 // 00000000 cdb27202 20000029 // 00000000 cdb27402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828236] 040: 00000000 cdb27602 20000029 // 00000000 cdb27802 20000029 // 00000000 cdb27a02 20000029 // 00000000 cdb27c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828240] 044: 00000000 cdb27e02 20000029 // 00000000 b6c26202 20000029 // 00000000 b70c1802 20000029 // 00000000 cdb26402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828246] 048: 00000000 b7304002 20000029 // 00000000 b7304402 20000029 // 00000000 b7304802 20000029 // 00000000 b7304a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828250] 04c: 00000000 b7304c02 20000029 // 00000000 b7304e02 20000029 // 00000000 b7305002 20000029 // 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828256] 050: 00000000 b72a5002 00000000 // 00000000 20000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828261] 054: 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828266] 058: 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828271] 05c: 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828276] 060: 00000001 2498b202 20000029 // 00000001 2498aa02 20000029 // 00000001 2498a202 20000029 // 00000001 2498a402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828281] 064: 00000001 2498ba02 20000029 // 00000001 2a6c4a02 20000029 // 00000001 26afe202 20000029 // 00000001 26afea02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828286] 068: 00000001 26afe402 20000029 // 00000001 26afec02 20000029 // 00000001 26affe02 20000029 // 00000001 26aff402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828291] 06c: 00000001 26affa02 20000029 // 00000001 2a0c1c02 20000029 // 00000001 2a2b2202 20000029 // 00000001 24932202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828296] 070: 00000001 24933e02 20000029 // 00000001 2907f402 20000029 // 00000001 26859e02 20000029 // 00000001 26858802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828301] 074: 00000001 26859602 20000029 // 00000001 26858402 20000029 // 00000001 26859002 20000029 // 00000001 26859c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828306] 078: 00000001 26859202 20000029 // 00000001 26858202 20000029 // 00000001 26859402 20000029 // 00000001 26859802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828311] 07c: 00000001 26858c02 20000029 // 00000001 269b9c02 20000029 // 00000001 269b8802 20000029 // 00000001 269b9e02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828316] 080: 00000001 29bcbe02 20000029 // 00000001 29bca802 20000029 // 00000001 29826402 20000029 // 00000001 29826802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828321] 084: 00000001 26a2f402 20000029 // 00000001 26a2e602 20000029 // 00000001 26a2e202 20000029 // 00000001 26a2e002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828326] 088: 00000001 26a2ea02 20000029 // 00000001 26a2ec02 20000029 // 00000001 29f47202 20000029 // 00000001 29f46402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828331] 08c: 00000001 29f47602 20000029 // 00000001 29f46002 20000029 // 00000001 29f46202 20000029 // 00000000 b72fb002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828336] 090: 00000000 b72fb202 20000029 // 00000000 b72fb602 20000029 // 00000000 b72fba02 20000029 // 00000000 b72faa02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828341] 094: 00000000 b72fa402 20000029 // 00000000 b72fbc02 20000029 // 00000000 b72fa002 20000029 // 00000000 b72fbe02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828346] 098: 00000000 b72fae02 20000029 // 00000000 37aaf202 20000029 // 00000000 37aaf402 20000029 // 00000000 37aaf602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828351] 09c: 00000000 37aaf802 20000029 // 00000000 37aafa02 20000029 // 00000000 37aafc02 20000029 // 00000000 37aafe02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828356] 0a0: 00000000 37aaf002 20000029 // 00000000 37aae002 20000029 // 00000000 37aae402 20000029 // 00000000 37aae602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828361] 0a4: 00000000 37aaea02 20000029 // 00000000 37aaec02 20000029 // 00000000 37aaee02 20000029 // 00000001 26a2fe02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828366] 0a8: 00000001 24932a02 20000029 // 00000001 24933602 20000029 // 00000001 24933202 20000029 // 00000001 24933802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828371] 0ac: 00000001 269b9802 20000029 // 00000001 269b8e02 20000029 // 00000001 269b9a02 20000029 // 00000001 2498a002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828376] 0b0: 00000001 29bcb402 20000029 // 00000001 24932602 20000029 // 00000001 24932402 20000029 // 00000001 269b8402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828381] 0b4: 00000000 37aae802 20000029 // 00000001 24933c02 20000029 // 00000001 269b9002 20000029 // 00000001 26afe002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828386] 0b8: 00000000 b7256002 20000029 // 00000000 b7256402 20000029 // 00000000 b7256802 20000029 // 00000000 b7256a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828391] 0bc: 00000000 b7256c02 20000029 // 00000000 b7256e02 20000029 // 00000000 b7257002 20000029 // 00000000 b7257202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828396] 0c0: 00000000 b7257402 20000029 // 00000000 b7257602 20000029 // 00000000 b7257802 20000029 // 00000000 b7257a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828401] 0c4: 00000000 b7257c02 20000029 // 00000000 b7257e02 20000029 // 00000001 24932c02 20000029 // 00000000 b7256602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828406] 0c8: 00000000 b734a002 20000029 // 00000000 b734a602 20000029 // 00000000 b734a802 20000029 // 00000000 b734aa02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828411] 0cc: 00000000 b734ac02 20000029 // 00000000 b734ae02 20000029 // 00000000 b734b002 20000029 // 00000000 b734b202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828416] 0d0: 00000000 b734b402 20000029 // 00000000 b734b602 20000029 // 00000000 b734b802 20000029 // 00000000 b734ba02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828421] 0d4: 00000000 b734bc02 20000029 // 00000000 b734be02 20000029 // 00000000 37aae202 20000029 // 00000000 b734a402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828426] 0d8: 00000000 b7266602 20000029 // 00000000 b7266802 20000029 // 00000000 b7266a02 20000029 // 00000000 b7266c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828431] 0dc: 00000000 b7266e02 20000029 // 00000000 b7267002 20000029 // 00000000 b7267202 20000029 // 00000000 b7267402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828436] 0e0: 00000000 b7267602 20000029 // 00000000 b7267802 20000029 // 00000000 b7267a02 20000029 // 00000000 b7267c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828441] 0e4: 00000000 b7266402 20000029 // 00000000 b7267e02 20000029 // 00000000 b7256202 20000029 // 00000000 b7266202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828446] 0e8: 00000000 b72a2002 20000029 // 00000000 b72a2402 20000029 // 00000000 b72a2802 20000029 // 00000000 b72a2a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828451] 0ec: 00000000 b72a2c02 20000029 // 00000000 b72a2e02 20000029 // 00000000 b72a3002 20000029 // 00000000 b72a3202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828456] 0f0: 00000000 b72a3402 20000029 // 00000000 b72a3602 20000029 // 00000000 b72a3802 20000029 // 00000000 b72a3a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828461] 0f4: 00000000 b72a3c02 20000029 // 00000000 b72a3e02 20000029 // 00000000 b7266002 20000029 // 00000000 b72a2602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828466] 0f8: 00000000 b736c002 20000029 // 00000000 b736c602 20000029 // 00000000 b736c802 20000029 // 00000000 b736ca02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828470] 0fc: 00000000 b736cc02 20000029 // 00000000 b736ce02 20000029 // 00000000 b736d002 20000029 // 00000000 b736d202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836016] eth1: Got tx_timeout. irq: 00000036
Jan 14 05:03:47 gizeh kernel: [25278.836019] eth1: Ring at 12a73c000
Jan 14 05:03:47 gizeh kernel: [25278.836021] eth1: Dumping tx registers
Jan 14 05:03:47 gizeh kernel: [25278.836026] 0: 00000036 00000000 00000003 0002000d 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836032] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836038] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836043] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836049] 80: 003b0f3c 00000000 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 05:03:47 gizeh kernel: [25278.836054] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 05:03:47 gizeh kernel: [25278.836059] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 05:03:47 gizeh kernel: [25278.836065] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 05:03:47 gizeh kernel: [25278.836070] 100: 2a73e000 2a73c000 01ff00ff 00000000 00010064 00000000 00000026 2a73e700
Jan 14 05:03:47 gizeh kernel: [25278.836076] 120: 2a73d4c0 00002c00 b7302a02 117bf040 8000061c 2a73e614 2a73d374 01e08000
Jan 14 05:03:47 gizeh kernel: [25278.836081] 140: 00304120 00002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836087] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836092] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836098] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836103] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836109] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836114] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836119] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836125] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836130] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 05:03:47 gizeh kernel: [25278.836136] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836141] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836147] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 05:03:47 gizeh kernel: [25278.836149] eth1: Dumping tx ring
Jan 14 05:03:47 gizeh kernel: [25278.836153] 000: 00000000 b72a2802 20000029 // 00000000 b72a2a02 20000029 // 00000000 b72a2c02 20000029 // 00000000 b72a2e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836158] 004: 00000000 b72a3002 20000029 // 00000000 b72a3202 20000029 // 00000000 b72a3402 20000029 // 00000000 b72a3602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836163] 008: 00000000 b72a3802 20000029 // 00000000 b72a3a02 20000029 // 00000000 b72a3c02 20000029 // 00000000 b72a3e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836168] 00c: 00000000 b72a2602 20000029 // 00000000 b736c002 20000029 // 00000000 b736c402 20000029 // 00000000 b736c802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836173] 010: 00000000 b736ca02 20000029 // 00000000 b736cc02 20000029 // 00000000 b736ce02 20000029 // 00000000 b736d002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836178] 014: 00000000 b736d202 20000029 // 00000000 b736d402 20000029 // 00000000 b736d602 20000029 // 00000000 b736d802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836183] 018: 00000000 b736da02 20000029 // 00000000 b736dc02 20000029 // 00000000 b736de02 20000029 // 00000000 b72a2202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836188] 01c: 00000000 b7256002 20000029 // 00000000 b7266202 20000029 // 00000000 b7210002 20000029 // 00000000 b7210402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836193] 020: 00000000 b7210602 20000029 // 00000000 b7210a02 20000029 // 00000000 b7210c02 20000029 // 00000000 b7210e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836198] 024: 00000000 b7211002 20000029 // 00000000 b7211202 20000029 // 00000000 b7211402 20000029 // 00000000 b7211602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836203] 028: 00000000 b7211802 20000029 // 00000000 b7211a02 20000029 // 00000000 b7211c02 20000029 // 00000000 b7211e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836208] 02c: 00000000 b736c602 20000029 // 00000000 b7210802 20000029 // 00000000 b6c26002 20000029 // 00000000 b6c26402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836213] 030: 00000000 b6c26802 20000029 // 00000000 b6c26a02 20000029 // 00000000 b6c26c02 20000029 // 00000000 b6c26e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836218] 034: 00000000 b6c27002 20000029 // 00000000 b6c27202 20000029 // 00000000 b6c27402 20000029 // 00000000 b6c27602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836223] 038: 00000000 b6c27802 20000029 // 00000000 b6c27a02 20000029 // 00000000 b6c27c02 20000029 // 00000000 b6c27e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836228] 03c: 00000000 b7210202 20000029 // 00000000 b6c26602 20000029 // 00000000 b734a002 20000029 // 00000000 b734a802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836233] 040: 00000000 b734aa02 20000029 // 00000000 b734ac02 20000029 // 00000000 b734a602 20000029 // 00000000 b734ae02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836238] 044: 00000000 b734b002 20000029 // 00000000 b734b202 20000029 // 00000000 b734b402 20000029 // 00000000 b734b602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836243] 048: 00000000 b734b802 20000029 // 00000000 b734ba02 20000029 // 00000000 b734bc02 20000029 // 00000000 b734be02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836248] 04c: 00000000 b736c202 20000029 // 00000000 b734a402 20000029 // 00000000 b70c0002 20000029 // 00000000 b70c0402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836253] 050: 00000000 b70c0602 20000029 // 00000000 b70c0a02 20000029 // 00000000 b70c0c02 20000029 // 00000000 b70c0e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836258] 054: 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029 // 00000000 b70c1402 20000029 // 00000000 b70c1802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836263] 058: 00000000 b70c1a02 20000029 // 00000000 b70c1c02 20000029 // 00000000 b70c1e02 20000029 // 00000000 b6c26202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836268] 05c: 00000000 b70c0802 20000029 // 00000000 b6c7e002 20000029 // 00000000 b6c7e402 20000029 // 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836273] 060: 00000000 22000040 a0000029 // 00000000 b7305602 a0000029 // 00000000 b7305802 a0000029 // 00000000 b7305a02 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836278] 064: 00000000 b7305c02 a0000029 // 00000000 b7305e02 a0000029 // 00000000 b7304002 a0000029 // 00000000 b7304402 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836283] 068: 00000000 b7304802 a0000029 // 00000000 b7304a02 a0000029 // 00000000 b7304c02 a0000029 // 00000000 b7304e02 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836288] 06c: 00000000 b7305002 a0000029 // 00000000 b7305402 a0000029 // 00000001 24932202 a0000029 // 00000001 24932a02 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836293] 070: 00000001 24933202 20000029 // 00000001 24933802 20000029 // 00000001 24932602 20000029 // 00000001 26afe402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836298] 074: 00000001 26afec02 20000029 // 00000001 26affe02 20000029 // 00000001 26aff402 20000029 // 00000001 26affa02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836303] 078: 00000001 26afe002 20000029 // 00000001 269b9c02 20000029 // 00000001 269b9e02 20000029 // 00000001 269b9802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836308] 07c: 00000001 269b9a02 20000029 // 00000001 269b8402 20000029 // 00000001 269b9002 20000029 // 00000001 29bcbe02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836313] 080: 00000001 29bcb402 20000029 // 00000001 2498b202 20000029 // 00000001 2498a402 20000029 // 00000001 2498ba02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836318] 084: 00000001 2498a002 20000029 // 00000001 26a2f402 20000029 // 00000001 26a2e202 20000029 // 00000001 26a2e002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836323] 088: 00000001 26a2ec02 20000029 // 00000001 26a2fe02 20000029 // 00000001 29f47202 20000029 // 00000001 29f46002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836329] 08c: 00000001 29f46202 20000029 // 00000001 29826402 20000029 // 00000001 26858802 20000029 // 00000001 26859602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836334] 090: 00000001 26858402 20000029 // 00000001 26859c02 20000029 // 00000001 26859202 20000029 // 00000001 26858202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836339] 094: 00000001 26859402 20000029 // 00000001 26859802 20000029 // 00000001 26858c02 20000029 // 00000001 2a6c4a02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836344] 098: 00000000 b7304602 20000029 // 00000001 24933602 20000029 // 00000001 24933c02 20000029 // 00000001 24932c02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836349] 09c: 00000001 26afe202 20000029 // 00000001 29bca802 20000029 // 00000001 2498a202 20000029 // 00000001 26a2e602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836354] 0a0: 00000001 29826802 20000029 // 00000001 26859002 20000029 // 00000001 2a0c1c02 20000029 // 00000001 24932402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836359] 0a4: 00000001 26afea02 20000029 // 00000001 269b8e02 20000029 // 00000001 26a2ea02 20000029 // 00000001 29f47602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836364] 0a8: 00000001 26859e02 20000029 // 00000001 24933e02 20000029 // 00000001 2498aa02 20000029 // 00000001 269b8802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836369] 0ac: 00000001 29f46402 20000029 // 00000001 2a2b2202 20000029 // 00000000 37aae002 20000029 // 00000000 37aae602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836374] 0b0: 00000000 37aae802 20000029 // 00000000 37aaea02 20000029 // 00000000 37aaec02 20000029 // 00000000 37aaee02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836379] 0b4: 00000000 37aaf002 20000029 // 00000000 37aaf202 20000029 // 00000000 37aaf402 20000029 // 00000000 37aaf602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836384] 0b8: 00000000 37aaf802 20000029 // 00000000 37aafa02 20000029 // 00000000 37aafc02 20000029 // 00000000 37aafe02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836388] 0bc: 00000000 b7304202 20000029 // 00000000 37aae402 20000029 // 00000000 b72a4002 20000029 // 00000000 b72a4402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836393] 0c0: 00000000 b72a4602 20000029 // 00000000 b72a4a02 20000029 // 00000000 b72a4c02 20000029 // 00000000 b72a4e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836398] 0c4: 00000000 b72a5002 20000029 // 00000000 b72a5202 20000029 // 00000000 b72a5402 20000029 // 00000000 b72a5602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836403] 0c8: 00000000 b72a5802 20000029 // 00000000 b72a5a02 20000029 // 00000000 b72a5c02 20000029 // 00000000 b72a5e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836409] 0cc: 00000001 2907f402 20000029 // 00000000 b72a4802 20000029 // 00000000 b732c202 20000029 // 00000000 b732c402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836414] 0d0: 00000000 b732c802 20000029 // 00000000 b732ca02 20000029 // 00000000 b732cc02 20000029 // 00000000 b732ce02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836419] 0d4: 00000000 b732d202 20000029 // 00000000 b732d402 20000029 // 00000000 b732d002 20000029 // 00000000 b732d602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836423] 0d8: 00000000 b732d802 20000029 // 00000000 b732da02 20000029 // 00000000 b732dc02 20000029 // 00000000 b732de02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836428] 0dc: 00000000 37aae202 20000029 // 00000000 b732c002 20000029 // 00000000 b7256202 20000029 // 00000000 b7256602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836434] 0e0: 00000000 b7256802 20000029 // 00000000 b7256a02 20000029 // 00000000 b7256e02 20000029 // 00000000 b7257002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836439] 0e4: 00000000 b7257202 20000029 // 00000000 b7257402 20000029 // 00000000 b7257602 20000029 // 00000000 b7257802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836444] 0e8: 00000000 b7257a02 20000029 // 00000000 b7257c02 20000029 // 00000000 b7257e02 20000029 // 00000000 b732c602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836449] 0ec: 00000000 b7256402 20000029 // 00000000 b7266002 20000029 // 00000000 b7266602 20000029 // 00000000 b7266802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836454] 0f0: 00000000 b7266a02 20000029 // 00000000 b7266c02 20000029 // 00000000 b7266e02 20000029 // 00000000 b7267002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836459] 0f4: 00000000 b7267202 20000029 // 00000000 b7267402 20000029 // 00000000 b7267802 20000029 // 00000000 b7267602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836464] 0f8: 00000000 b7267a02 20000029 // 00000000 b7267c02 20000029 // 00000000 b7267e02 20000029 // 00000000 b72a4202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836469] 0fc: 00000000 b7266402 20000029 // 00000000 b7256c02 20000029 // 00000000 b72a2002 20000029 // 00000000 b72a2402 20000029
Jan 14 06:25:34 gizeh rsyslogd: [origin software="rsyslogd" swVersion="4.6.4" x-pid="1750" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.
Jan 14 07:15:47 gizeh kernel: [33198.836015] eth1: Got tx_timeout. irq: 00000036
Jan 14 07:15:47 gizeh kernel: [33198.836019] eth1: Ring at 12a73c000
Jan 14 07:15:47 gizeh kernel: [33198.836021] eth1: Dumping tx registers
Jan 14 07:15:47 gizeh kernel: [33198.836026] 0: 00000036 00000000 00000003 000d000d 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836032] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836037] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836042] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836048] 80: 003b0f3c 00c02601 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 07:15:47 gizeh kernel: [33198.836054] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 07:15:47 gizeh kernel: [33198.836059] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 07:15:47 gizeh kernel: [33198.836064] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 07:15:47 gizeh kernel: [33198.836070] 100: 2a73e000 2a73c000 01ff00ff 00002601 00010064 00000000 00000039 2a73e800
Jan 14 07:15:47 gizeh kernel: [33198.836076] 120: 2a73d4c0 00002c40 b73029c2 117bf040 8000061c 2a73e614 2a73d374 01e08000
Jan 14 07:15:47 gizeh kernel: [33198.836081] 140: 00304120 00002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836086] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836092] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836097] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836103] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836108] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836114] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836119] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836124] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836130] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 07:15:47 gizeh kernel: [33198.836135] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836141] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836146] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 07:15:47 gizeh kernel: [33198.836148] eth1: Dumping tx ring
Jan 14 07:15:47 gizeh kernel: [33198.836152] 000: 00000000 b732c602 20000029 // 00000000 b732ca02 20000029 // 00000000 b732cc02 20000029 // 00000000 b732ce02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836158] 004: 00000000 b732d002 20000029 // 00000000 b732d202 20000029 // 00000000 b732d602 20000029 // 00000000 b732d402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836163] 008: 00000000 b732d802 20000029 // 00000000 b732da02 20000029 // 00000000 b732dc02 20000029 // 00000000 b732de02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836168] 00c: 00000000 b72a4202 20000029 // 00000000 b732c202 20000029 // 00000000 b7256002 20000029 // 00000000 b7256402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836173] 010: 00000000 99e2b802 20000029 // 00000000 99e2b202 20000029 // 00000000 99e2ae02 20000029 // 00000000 99e2a202 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836178] 014: 00000000 99e2b402 20000029 // 00000000 99e2aa02 20000029 // 00000000 99e2bc02 20000029 // 00000000 99e2ba02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836183] 018: 00000000 99e2a802 20000029 // 00000000 99e2a602 20000029 // 00000000 b70c0602 20000029 // 00000000 b7256e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836188] 01c: 00000000 55a2e402 20000029 // 00000000 55a2f602 20000029 // 00000000 55a2f202 20000029 // 00000000 55a2f802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836193] 020: 00000000 55a2ec02 20000029 // 00000000 55a2e202 20000029 // 00000000 55a2ea02 20000029 // 00000000 55a2fe02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836198] 024: 00000000 55a2fc02 20000029 // 00000000 55a2fa02 20000029 // 00000000 55a2ee02 20000029 // 00000000 55a2e802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836203] 028: 00000000 55a2e002 20000029 // 00000000 55a2e602 20000029 // 00000000 99e2be02 20000029 // 00000000 99e2a002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836208] 02c: 00000000 99e2b002 20000029 // 00000000 b7256602 20000029 // 00000000 b7256a02 20000029 // 00000000 b7257e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836213] 030: 00000000 b7256c02 20000029 // 00000000 b7257202 20000029 // 00000000 b7257602 20000029 // 00000000 b7257002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836218] 034: 00000000 b7257402 20000029 // 00000000 b7257a02 20000029 // 00000000 b7257c02 20000029 // 00000000 b7257802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836223] 038: 00000000 b732c802 20000029 // 00000000 55a2f002 20000029 // 00000000 99e2a402 20000029 // 00000000 99e2b602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836228] 03c: 00000000 b7256802 20000029 // 00000000 55a2f402 20000029 // 00000001 1e7c4002 20000029 // 00000001 1e7c4402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836233] 040: 00000001 1e7c4802 20000029 // 00000001 1e7c4a02 20000029 // 00000001 1e7c4c02 20000029 // 00000001 1e7c4e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836238] 044: 00000001 1e7c5002 20000029 // 00000001 1e7c5202 20000029 // 00000001 1e7c5402 20000029 // 00000001 1e7c5602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836243] 048: 00000001 1e7c5802 20000029 // 00000001 1e7c5a02 20000029 // 00000001 1e7c5e02 20000029 // 00000000 99e2ac02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836248] 04c: 00000001 1e7c4202 20000029 // 00000001 1e7c5c02 20000029 // 00000001 1faac002 20000029 // 00000001 1faac802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836253] 050: 00000001 1faaca02 20000029 // 00000001 1faacc02 20000029 // 00000001 1faac602 20000029 // 00000001 1faace02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836258] 054: 00000001 1faad002 20000029 // 00000001 1faad202 20000029 // 00000001 1faad402 20000029 // 00000001 1faad602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836263] 058: 00000001 1faad802 20000029 // 00000001 1faada02 20000029 // 00000001 1faadc02 20000029 // 00000001 1faade02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836268] 05c: 00000001 1e7c4602 20000029 // 00000001 1faac202 20000029 // 00000001 13708002 20000029 // 00000001 13708402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836273] 060: 00000001 13708602 20000029 // 00000001 13708c02 20000029 // 00000001 13708e02 20000029 // 00000001 13709002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836278] 064: 00000001 13709202 20000029 // 00000001 13709402 20000029 // 00000001 13709602 20000029 // 00000001 13709802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836283] 068: 00000001 13709a02 20000029 // 00000001 13709c02 20000029 // 00000001 13709e02 20000029 // 00000000 b7256202 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836288] 06c: 00000001 13708802 20000029 // 00000001 1faac402 20000029 // 00000001 0d884002 20000029 // 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836293] 070: 00000000 b6c7e602 a0000029 // 00000000 b6c7ea02 a0000029 // 00000000 b6c7ec02 a0000029 // 00000000 b6c7ee02 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836298] 074: 00000000 b6c7f202 a0000029 // 00000000 b6c7f402 a0000029 // 00000000 b6c7f602 a0000029 // 00000000 b6c7e202 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836303] 078: 00000000 b6c7f802 a0000029 // 00000000 b6c7fa02 a0000029 // 00000000 b6c7fc02 a0000029 // 00000000 b6c7fe02 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836308] 07c: 00000000 b6c7e402 a0000029 // 00000000 b6c7e002 a0000029 // 00000001 2907f402 a0000029 // 00000001 29f47202 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836313] 080: 00000001 29f47602 20000029 // 00000001 29f46402 20000029 // 00000001 269b9c02 20000029 // 00000001 269b9a02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836318] 084: 00000001 269b8402 20000029 // 00000001 269b9002 20000029 // 00000001 269b8e02 20000029 // 00000001 269b8802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836323] 088: 00000001 2498b202 20000029 // 00000001 2498a002 20000029 // 00000001 2498a202 20000029 // 00000001 2498aa02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836329] 08c: 00000001 24932202 20000029 // 00000001 24933202 20000029 // 00000001 24933802 20000029 // 00000001 24933602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836334] 090: 00000001 24933c02 20000029 // 00000001 24932c02 20000029 // 00000001 24932402 20000029 // 00000001 24933e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836339] 094: 00000001 26858802 20000029 // 00000001 26859202 20000029 // 00000001 26858202 20000029 // 00000001 26859402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836344] 098: 00000001 26859802 20000029 // 00000001 26858c02 20000029 // 00000001 26859002 20000029 // 00000001 26859e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836349] 09c: 00000001 26a2f402 20000029 // 00000001 26a2e002 20000029 // 00000001 26a2fe02 20000029 // 00000001 26a2e602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836354] 0a0: 00000001 26a2ea02 20000029 // 00000001 26afe402 20000029 // 00000001 26affe02 20000029 // 00000001 26aff402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836359] 0a4: 00000001 26afe002 20000029 // 00000001 26afe202 20000029 // 00000001 26afea02 20000029 // 00000001 2a0c1c02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836364] 0a8: 00000001 29826802 20000029 // 00000001 29bcbe02 20000029 // 00000001 2a6c4a02 20000029 // 00000000 b6c7f002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836369] 0ac: 00000001 2a2b2202 20000029 // 00000001 269b9e02 20000029 // 00000001 2498a402 20000029 // 00000001 24932a02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836374] 0b0: 00000001 26858402 20000029 // 00000001 26859c02 20000029 // 00000001 26a2ec02 20000029 // 00000001 26affa02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836379] 0b4: 00000001 29826402 20000029 // 00000001 29bca802 20000029 // 00000001 29f46002 20000029 // 00000001 269b9802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836384] 0b8: 00000001 26859602 20000029 // 00000001 26a2e202 20000029 // 00000001 29f46202 20000029 // 00000001 29bcb402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836389] 0bc: 00000001 2498ba02 20000029 // 00000000 b6c7e802 20000029 // 00000000 b7304002 20000029 // 00000000 b7304602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836394] 0c0: 00000000 b7304802 20000029 // 00000000 b7304a02 20000029 // 00000000 b7304c02 20000029 // 00000000 b7304e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836398] 0c4: 00000000 b7305002 20000029 // 00000000 b7305202 20000029 // 00000000 b7305402 20000029 // 00000000 b7305602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836403] 0c8: 00000000 b7305802 20000029 // 00000000 b7305a02 20000029 // 00000000 b7305c02 20000029 // 00000000 b7305e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836408] 0cc: 00000001 24932602 20000029 // 00000000 b7304402 20000029 // 00000000 cdb26002 20000029 // 00000000 cdb26402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836413] 0d0: 00000000 cdb26602 20000029 // 00000000 cdb26a02 20000029 // 00000000 cdb26c02 20000029 // 00000000 cdb26e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836418] 0d4: 00000000 cdb27002 20000029 // 00000000 cdb27202 20000029 // 00000000 cdb27402 20000029 // 00000000 cdb27602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836423] 0d8: 00000000 cdb27802 20000029 // 00000000 cdb27a02 20000029 // 00000000 cdb27c02 20000029 // 00000000 cdb27e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836428] 0dc: 00000001 26afec02 20000029 // 00000000 cdb26802 20000029 // 00000000 b70c0002 20000029 // 00000000 b70c0402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836433] 0e0: 00000000 b70c0802 20000029 // 00000000 b70c0a02 20000029 // 00000000 b70c0c02 20000029 // 00000000 b70c0e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836438] 0e4: 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029 // 00000000 b70c1402 20000029 // 00000000 b70c1602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836443] 0e8: 00000000 b70c1802 20000029 // 00000000 b70c1c02 20000029 // 00000000 b70c1e02 20000029 // 00000000 cdb26202 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836448] 0ec: 00000000 b7304202 20000029 // 00000000 b72a4002 20000029 // 00000000 b72a4402 20000029 // 00000000 b72a4802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836453] 0f0: 00000000 b72a4a02 20000029 // 00000000 b72a4c02 20000029 // 00000000 b72a4e02 20000029 // 00000000 b72a5002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836458] 0f4: 00000000 b72a5202 20000029 // 00000000 b72a5402 20000029 // 00000000 b72a5802 20000029 // 00000000 b72a5a02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836463] 0f8: 00000000 b72a5c02 20000029 // 00000000 b72a5e02 20000029 // 00000000 b70c0202 20000029 // 00000000 b72a5602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836468] 0fc: 00000000 b72a4602 20000029 // 00000000 b70c1a02 20000029 // 00000000 b732c002 20000029 // 00000000 b732c402 20000029
^ permalink raw reply
* Re: [PATCH] can: test size of struct sockaddr
From: Oliver Hartkopp @ 2011-01-15 17:08 UTC (permalink / raw)
To: Kurt Van Dijck
Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <20110114172321.GB331-MxZ6Iy/zr/UdbCeoMzGj59i2O/JbrIOy@public.gmane.org>
On 14.01.2011 18:23, Kurt Van Dijck wrote:
> I think this patch makes the CAN socket code comform to the
> manpages of sendmsg & recvmsg.
Hello Kurt,
if you check similar code sniplets in the kernel you would see, that in
recvmsg()-cases the given namelen is not used from userspace.
If msg->msg_name is not NULL the msg_namelen is just set by the kernel. E.g.
see af_packet.c, af_econet.c, etc.
So the code in candump.c setting the msg_namelen before recvmsg() is obviously
obsolete ...
Btw. your two patches below for bcm_sendmsg() and raw_sendmesg() look good.
If you would like to resubmit these two patches, you may add my Acked-by
Thanks,
Oliver
> diff --git a/net/can/bcm.c b/net/can/bcm.c
> index 6faa825..dc0d5d6 100644
> --- a/net/can/bcm.c
> +++ b/net/can/bcm.c
> @@ -1256,6 +1256,9 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock,
> struct sockaddr_can *addr =
> (struct sockaddr_can *)msg->msg_name;
>
> + if (msg->msg_namelen < sizeof(*addr))
> + return -EINVAL;
> +
> if (addr->can_family != AF_CAN)
> return -EINVAL;
>
> diff --git a/net/can/raw.c b/net/can/raw.c
> index e88f610..e68a6d3 100644
> --- a/net/can/raw.c
> +++ b/net/can/raw.c
> @@ -649,6 +649,9 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
> struct sockaddr_can *addr =
> (struct sockaddr_can *)msg->msg_name;
>
> + if (msg->msg_namelen < sizeof(*addr))
> + return -EINVAL;
> +
> if (addr->can_family != AF_CAN)
> return -EINVAL;
>
^ permalink raw reply
* Re: [PATCH v3 0/2] net: add device groups
From: Vlad Dogaru @ 2011-01-15 16:45 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, jamal, Octavian Purdila
In-Reply-To: <20110114080810.2f128064@nehalam>
On Fri, Jan 14, 2011 at 08:08:10AM -0800, Stephen Hemminger wrote:
> On Fri, 14 Jan 2011 11:38:29 +0200
> Vlad Dogaru <ddvlad@rosedu.org> wrote:
>
> > This patchset implements network device grouping and simple manipulation
> > of groups. Netlink has been updated to provide group information and
> > means of applying changes to members of a specific group via a single
> > message.
> >
> > The patchset has a corresponding one for iproute2, which implements the
> > new functionality in userspace.
>
> What about a read/write sysfs interface as well?
> /sys/class/net/eth0/devgroup
Oops, I overlooked that, probably because I've been testing in a virtual
machine where the kernel has sysfs turned off -- less waiting for simple
tests.
> Not sure if numeric devgroup is best choice. Since this is more of
> a human interface parameter maybe it should be a string? Or have
> a translation in the utilities /etc/iproute2/devgroup?
I didn't know about /etc/iproute2. I could add the devgroup file as you
mention, seems like a good choice for userspace.
I'll update the patches with these, but it will probably take a few days,
I have a few exams next week :)
Thanks for the suggestions,
Vlad
^ permalink raw reply
* Re: [patch] caif: checking the wrong variable
From: Sjur Brændeland @ 2011-01-15 14:03 UTC (permalink / raw)
To: Dan Carpenter; +Cc: David S. Miller, netdev, kernel-janitors
In-Reply-To: <20110115130639.GA2721@bicker>
> In the original code we check if (servl == NULL) twice. The first time
> should print the message that cfmuxl_remove_uplayer() failed and set
> "ret" correctly, but instead it just returns success. The second check
> should be checking the value of "ret" instead of "servl".
>
> Signed-off-by: Dan Carpenter <error27@gmail.com>
Thank you for spotting and correcting this.
Looks good to me (reviewed only)
Acked-by: Sjur Braendeland <sjur.brandeland@stericsson.com>
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox