diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/arch/ppc/oprofile/op_model_fsl_booke.c linux-2.6.11-ck3/arch/ppc/oprofile/op_model_fsl_booke.c --- linux-2.6.11-ck2/arch/ppc/oprofile/op_model_fsl_booke.c 2005-03-02 19:30:24.000000000 +1100 +++ linux-2.6.11-ck3/arch/ppc/oprofile/op_model_fsl_booke.c 2005-03-26 11:33:22.000000000 +1100 @@ -150,7 +150,6 @@ static void fsl_booke_handle_interrupt(s int is_kernel; int val; int i; - unsigned int cpu = smp_processor_id(); /* set the PMM bit (see comment below) */ mtmsr(mfmsr() | MSR_PMM); @@ -162,7 +161,7 @@ static void fsl_booke_handle_interrupt(s val = ctr_read(i); if (val < 0) { if (oprofile_running && ctr[i].enabled) { - oprofile_add_sample(pc, is_kernel, i, cpu); + oprofile_add_pc(pc, is_kernel, i); ctr_write(i, reset_value[i]); } else { ctr_write(i, 0); diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/arch/ppc/platforms/4xx/ebony.h linux-2.6.11-ck3/arch/ppc/platforms/4xx/ebony.h --- linux-2.6.11-ck2/arch/ppc/platforms/4xx/ebony.h 2004-10-19 08:57:05.000000000 +1000 +++ linux-2.6.11-ck3/arch/ppc/platforms/4xx/ebony.h 2005-03-26 11:33:22.000000000 +1100 @@ -61,8 +61,8 @@ */ /* OpenBIOS defined UART mappings, used before early_serial_setup */ -#define UART0_IO_BASE (u8 *) 0xE0000200 -#define UART1_IO_BASE (u8 *) 0xE0000300 +#define UART0_IO_BASE 0xE0000200 +#define UART1_IO_BASE 0xE0000300 /* external Epson SG-615P */ #define BASE_BAUD 691200 diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/arch/ppc/platforms/4xx/luan.h linux-2.6.11-ck3/arch/ppc/platforms/4xx/luan.h --- linux-2.6.11-ck2/arch/ppc/platforms/4xx/luan.h 2005-03-02 19:30:24.000000000 +1100 +++ linux-2.6.11-ck3/arch/ppc/platforms/4xx/luan.h 2005-03-26 11:33:22.000000000 +1100 @@ -47,9 +47,9 @@ #define RS_TABLE_SIZE 3 /* PIBS defined UART mappings, used before early_serial_setup */ -#define UART0_IO_BASE (u8 *) 0xa0000200 -#define UART1_IO_BASE (u8 *) 0xa0000300 -#define UART2_IO_BASE (u8 *) 0xa0000600 +#define UART0_IO_BASE 0xa0000200 +#define UART1_IO_BASE 0xa0000300 +#define UART2_IO_BASE 0xa0000600 #define BASE_BAUD 11059200 #define STD_UART_OP(num) \ diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/arch/ppc/platforms/4xx/ocotea.h linux-2.6.11-ck3/arch/ppc/platforms/4xx/ocotea.h --- linux-2.6.11-ck2/arch/ppc/platforms/4xx/ocotea.h 2005-03-02 19:30:24.000000000 +1100 +++ linux-2.6.11-ck3/arch/ppc/platforms/4xx/ocotea.h 2005-03-26 11:33:22.000000000 +1100 @@ -56,8 +56,8 @@ #define RS_TABLE_SIZE 2 /* OpenBIOS defined UART mappings, used before early_serial_setup */ -#define UART0_IO_BASE (u8 *) 0xE0000200 -#define UART1_IO_BASE (u8 *) 0xE0000300 +#define UART0_IO_BASE 0xE0000200 +#define UART1_IO_BASE 0xE0000300 #define BASE_BAUD 11059200/16 #define STD_UART_OP(num) \ diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/block/cfq-iosched.c linux-2.6.11-ck3/drivers/block/cfq-iosched.c --- linux-2.6.11-ck2/drivers/block/cfq-iosched.c 2005-03-09 23:04:22.000000000 +1100 +++ linux-2.6.11-ck3/drivers/block/cfq-iosched.c 2005-03-26 11:33:22.000000000 +1100 @@ -1723,11 +1723,16 @@ cfq_insert_request(request_queue_t *q, s } } +static inline int cfq_pending_requests(struct cfq_data *cfqd) +{ + return !list_empty(&cfqd->queue->queue_head) || cfqd->busy_queues; +} + static int cfq_queue_empty(request_queue_t *q) { struct cfq_data *cfqd = q->elevator->elevator_data; - return list_empty(&q->queue_head) && !cfqd->busy_queues; + return !cfq_pending_requests(cfqd); } static void cfq_completed_request(request_queue_t *q, struct request *rq) @@ -2048,7 +2053,7 @@ static void cfq_idle_slice_timer(unsigne * only expire and reinvoke request handler, if there are * other queues with pending requests */ - if (!cfqd->busy_queues) { + if (!cfq_pending_requests(cfqd)) { cfqd->idle_slice_timer.expires = min(now + cfqd->cfq_slice_idle, cfqq->slice_end); add_timer(&cfqd->idle_slice_timer); goto out_cont; @@ -2065,7 +2070,7 @@ static void cfq_idle_slice_timer(unsigne expire: cfq_slice_expired(cfqd, 0); out_kick: - if (cfqd->busy_queues) + if (cfq_pending_requests(cfqd)) kblockd_schedule_work(&cfqd->unplug_work); out_cont: spin_unlock_irqrestore(cfqd->queue->queue_lock, flags); diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/block/ll_rw_blk.c linux-2.6.11-ck3/drivers/block/ll_rw_blk.c --- linux-2.6.11-ck2/drivers/block/ll_rw_blk.c 2005-03-09 23:04:22.000000000 +1100 +++ linux-2.6.11-ck3/drivers/block/ll_rw_blk.c 2005-03-26 11:33:22.000000000 +1100 @@ -2519,7 +2519,7 @@ static inline void blk_partition_remap(s if (bdev != bdev->bd_contains) { struct hd_struct *p = bdev->bd_part; - switch (bio->bi_rw) { + switch (bio_data_dir(bio)) { case READ: p->read_sectors += bio_sectors(bio); p->reads++; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/char/drm/drm_ioctl.c linux-2.6.11-ck3/drivers/char/drm/drm_ioctl.c --- linux-2.6.11-ck2/drivers/char/drm/drm_ioctl.c 2005-03-02 19:30:25.000000000 +1100 +++ linux-2.6.11-ck3/drivers/char/drm/drm_ioctl.c 2005-03-26 11:33:22.000000000 +1100 @@ -326,6 +326,8 @@ int drm_setversion(DRM_IOCTL_ARGS) DRM_COPY_FROM_USER_IOCTL(sv, argp, sizeof(sv)); + memset(&version, 0, sizeof(version)); + dev->driver->version(&version); retv.drm_di_major = DRM_IF_MAJOR; retv.drm_di_minor = DRM_IF_MINOR; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/media/video/adv7170.c linux-2.6.11-ck3/drivers/media/video/adv7170.c --- linux-2.6.11-ck2/drivers/media/video/adv7170.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/media/video/adv7170.c 2005-03-26 11:33:22.000000000 +1100 @@ -130,7 +130,7 @@ adv7170_write_block (struct i2c_client * u8 block_data[32]; msg.addr = client->addr; - msg.flags = client->flags; + msg.flags = 0; while (len >= 2) { msg.buf = (char *) block_data; msg.len = 0; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/media/video/adv7175.c linux-2.6.11-ck3/drivers/media/video/adv7175.c --- linux-2.6.11-ck2/drivers/media/video/adv7175.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/media/video/adv7175.c 2005-03-26 11:33:22.000000000 +1100 @@ -126,7 +126,7 @@ adv7175_write_block (struct i2c_client * u8 block_data[32]; msg.addr = client->addr; - msg.flags = client->flags; + msg.flags = 0; while (len >= 2) { msg.buf = (char *) block_data; msg.len = 0; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/media/video/bt819.c linux-2.6.11-ck3/drivers/media/video/bt819.c --- linux-2.6.11-ck2/drivers/media/video/bt819.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/media/video/bt819.c 2005-03-26 11:33:22.000000000 +1100 @@ -146,7 +146,7 @@ bt819_write_block (struct i2c_client *cl u8 block_data[32]; msg.addr = client->addr; - msg.flags = client->flags; + msg.flags = 0; while (len >= 2) { msg.buf = (char *) block_data; msg.len = 0; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/media/video/saa7110.c linux-2.6.11-ck3/drivers/media/video/saa7110.c --- linux-2.6.11-ck2/drivers/media/video/saa7110.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/media/video/saa7110.c 2005-03-26 11:33:22.000000000 +1100 @@ -60,8 +60,10 @@ MODULE_PARM_DESC(debug, "Debug level (0- #define I2C_SAA7110 0x9C /* or 0x9E */ +#define SAA7110_NR_REG 0x35 + struct saa7110 { - unsigned char reg[54]; + u8 reg[SAA7110_NR_REG]; int norm; int input; @@ -95,31 +97,28 @@ saa7110_write_block (struct i2c_client * unsigned int len) { int ret = -1; - u8 reg = *data++; + u8 reg = *data; /* first register to write to */ - len--; + /* Sanity check */ + if (reg + (len - 1) > SAA7110_NR_REG) + return ret; /* the saa7110 has an autoincrement function, use it if * the adapter understands raw I2C */ if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { struct saa7110 *decoder = i2c_get_clientdata(client); struct i2c_msg msg; - u8 block_data[54]; - msg.len = 0; - msg.buf = (char *) block_data; + msg.len = len; + msg.buf = (char *) data; msg.addr = client->addr; - msg.flags = client->flags; - while (len >= 1) { - msg.len = 0; - block_data[msg.len++] = reg; - while (len-- >= 1 && msg.len < 54) - block_data[msg.len++] = - decoder->reg[reg++] = *data++; - ret = i2c_transfer(client->adapter, &msg, 1); - } + msg.flags = 0; + ret = i2c_transfer(client->adapter, &msg, 1); + + /* Cache the written data */ + memcpy(decoder->reg + reg, data + 1, len - 1); } else { - while (len-- >= 1) { + for (++data, --len; len; len--) { if ((ret = saa7110_write(client, reg++, *data++)) < 0) break; @@ -192,7 +191,7 @@ saa7110_selmux (struct i2c_client *clien return 0; } -static const unsigned char initseq[] = { +static const unsigned char initseq[1 + SAA7110_NR_REG] = { 0, 0x4C, 0x3C, 0x0D, 0xEF, 0xBD, 0xF2, 0x03, 0x00, /* 0x08 */ 0xF8, 0xF8, 0x60, 0x60, 0x00, 0x86, 0x18, 0x90, /* 0x10 */ 0x00, 0x59, 0x40, 0x46, 0x42, 0x1A, 0xFF, 0xDA, diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/media/video/saa7114.c linux-2.6.11-ck3/drivers/media/video/saa7114.c --- linux-2.6.11-ck2/drivers/media/video/saa7114.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/media/video/saa7114.c 2005-03-26 11:33:22.000000000 +1100 @@ -163,7 +163,7 @@ saa7114_write_block (struct i2c_client * u8 block_data[32]; msg.addr = client->addr; - msg.flags = client->flags; + msg.flags = 0; while (len >= 2) { msg.buf = (char *) block_data; msg.len = 0; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/media/video/saa7185.c linux-2.6.11-ck3/drivers/media/video/saa7185.c --- linux-2.6.11-ck2/drivers/media/video/saa7185.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/media/video/saa7185.c 2005-03-26 11:33:22.000000000 +1100 @@ -118,7 +118,7 @@ saa7185_write_block (struct i2c_client * u8 block_data[32]; msg.addr = client->addr; - msg.flags = client->flags; + msg.flags = 0; while (len >= 2) { msg.buf = (char *) block_data; msg.len = 0; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/net/amd8111e.c linux-2.6.11-ck3/drivers/net/amd8111e.c --- linux-2.6.11-ck2/drivers/net/amd8111e.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/net/amd8111e.c 2005-03-26 11:33:22.000000000 +1100 @@ -1381,6 +1381,8 @@ static int amd8111e_open(struct net_devi if(amd8111e_restart(dev)){ spin_unlock_irq(&lp->lock); + if (dev->irq) + free_irq(dev->irq, dev); return -ENOMEM; } /* Start ipg timer */ diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/net/ppp_async.c linux-2.6.11-ck3/drivers/net/ppp_async.c --- linux-2.6.11-ck2/drivers/net/ppp_async.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/net/ppp_async.c 2005-03-26 11:33:22.000000000 +1100 @@ -1000,7 +1000,7 @@ static void async_lcp_peek(struct asyncp data += 4; dlen -= 4; /* data[0] is code, data[1] is length */ - while (dlen >= 2 && dlen >= data[1]) { + while (dlen >= 2 && dlen >= data[1] && data[1] >= 2) { switch (data[0]) { case LCP_MRU: val = (data[2] << 8) + data[3]; diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/net/r8169.c linux-2.6.11-ck3/drivers/net/r8169.c --- linux-2.6.11-ck2/drivers/net/r8169.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/net/r8169.c 2005-03-26 11:33:22.000000000 +1100 @@ -1683,16 +1683,19 @@ static void rtl8169_free_rx_skb(struct r rtl8169_make_unusable_by_asic(desc); } -static inline void rtl8169_return_to_asic(struct RxDesc *desc, int rx_buf_sz) +static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz) { - desc->opts1 |= cpu_to_le32(DescOwn + rx_buf_sz); + u32 eor = le32_to_cpu(desc->opts1) & RingEnd; + + desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz); } -static inline void rtl8169_give_to_asic(struct RxDesc *desc, dma_addr_t mapping, - int rx_buf_sz) +static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping, + u32 rx_buf_sz) { desc->addr = cpu_to_le64(mapping); - desc->opts1 |= cpu_to_le32(DescOwn + rx_buf_sz); + wmb(); + rtl8169_mark_to_asic(desc, rx_buf_sz); } static int rtl8169_alloc_rx_skb(struct pci_dev *pdev, struct sk_buff **sk_buff, @@ -1712,7 +1715,7 @@ static int rtl8169_alloc_rx_skb(struct p mapping = pci_map_single(pdev, skb->tail, rx_buf_sz, PCI_DMA_FROMDEVICE); - rtl8169_give_to_asic(desc, mapping, rx_buf_sz); + rtl8169_map_to_asic(desc, mapping, rx_buf_sz); out: return ret; @@ -2150,7 +2153,7 @@ static inline int rtl8169_try_rx_copy(st skb_reserve(skb, NET_IP_ALIGN); eth_copy_and_sum(skb, sk_buff[0]->tail, pkt_size, 0); *sk_buff = skb; - rtl8169_return_to_asic(desc, rx_buf_sz); + rtl8169_mark_to_asic(desc, rx_buf_sz); ret = 0; } } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/net/sis900.c linux-2.6.11-ck3/drivers/net/sis900.c --- linux-2.6.11-ck2/drivers/net/sis900.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/net/sis900.c 2005-03-26 11:33:22.000000000 +1100 @@ -236,7 +236,7 @@ static int __devinit sis900_get_mac_addr signature = (u16) read_eeprom(ioaddr, EEPROMSignature); if (signature == 0xffff || signature == 0x0000) { printk (KERN_INFO "%s: Error EERPOM read %x\n", - net_dev->name, signature); + pci_name(pci_dev), signature); return 0; } @@ -268,7 +268,7 @@ static int __devinit sis630e_get_mac_add if (!isa_bridge) isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, 0x0018, isa_bridge); if (!isa_bridge) { - printk("%s: Can not find ISA bridge\n", net_dev->name); + printk("%s: Can not find ISA bridge\n", pci_name(pci_dev)); return 0; } pci_read_config_byte(isa_bridge, 0x48, ®); @@ -456,10 +456,6 @@ static int __devinit sis900_probe(struct net_dev->tx_timeout = sis900_tx_timeout; net_dev->watchdog_timeo = TX_TIMEOUT; net_dev->ethtool_ops = &sis900_ethtool_ops; - - ret = register_netdev(net_dev); - if (ret) - goto err_unmap_rx; /* Get Mac address according to the chip revision */ pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &revision); @@ -476,7 +472,7 @@ static int __devinit sis900_probe(struct if (ret == 0) { ret = -ENODEV; - goto err_out_unregister; + goto err_unmap_rx; } /* 630ET : set the mii access mode as software-mode */ @@ -486,7 +482,7 @@ static int __devinit sis900_probe(struct /* probe for mii transceiver */ if (sis900_mii_probe(net_dev) == 0) { ret = -ENODEV; - goto err_out_unregister; + goto err_unmap_rx; } /* save our host bridge revision */ @@ -496,6 +492,10 @@ static int __devinit sis900_probe(struct pci_dev_put(dev); } + ret = register_netdev(net_dev); + if (ret) + goto err_unmap_rx; + /* print some information about our NIC */ printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ", net_dev->name, card_name, ioaddr, net_dev->irq); @@ -505,8 +505,6 @@ static int __devinit sis900_probe(struct return 0; - err_out_unregister: - unregister_netdev(net_dev); err_unmap_rx: pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring, sis_priv->rx_ring_dma); @@ -533,6 +531,7 @@ static int __devinit sis900_probe(struct static int __init sis900_mii_probe(struct net_device * net_dev) { struct sis900_private * sis_priv = net_dev->priv; + const char *dev_name = pci_name(sis_priv->pci_dev); u16 poll_bit = MII_STAT_LINK, status = 0; unsigned long timeout = jiffies + 5 * HZ; int phy_addr; @@ -582,21 +581,20 @@ static int __init sis900_mii_probe(struc mii_phy->phy_types = (mii_status & (MII_STAT_CAN_TX_FDX | MII_STAT_CAN_TX)) ? LAN : HOME; printk(KERN_INFO "%s: %s transceiver found at address %d.\n", - net_dev->name, mii_chip_table[i].name, + dev_name, mii_chip_table[i].name, phy_addr); break; } if( !mii_chip_table[i].phy_id1 ) { printk(KERN_INFO "%s: Unknown PHY transceiver found at address %d.\n", - net_dev->name, phy_addr); + dev_name, phy_addr); mii_phy->phy_types = UNKNOWN; } } if (sis_priv->mii == NULL) { - printk(KERN_INFO "%s: No MII transceivers found!\n", - net_dev->name); + printk(KERN_INFO "%s: No MII transceivers found!\n", dev_name); return 0; } @@ -621,7 +619,7 @@ static int __init sis900_mii_probe(struc poll_bit ^= (mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS) & poll_bit); if (time_after_eq(jiffies, timeout)) { printk(KERN_WARNING "%s: reset phy and link down now\n", - net_dev->name); + dev_name); return -ETIME; } } @@ -691,7 +689,7 @@ static u16 sis900_default_phy(struct net sis_priv->mii = default_phy; sis_priv->cur_phy = default_phy->phy_addr; printk(KERN_INFO "%s: Using transceiver found at address %d as default\n", - net_dev->name,sis_priv->cur_phy); + pci_name(sis_priv->pci_dev), sis_priv->cur_phy); } status = mdio_read(net_dev, sis_priv->cur_phy, MII_CONTROL); diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/net/tun.c linux-2.6.11-ck3/drivers/net/tun.c --- linux-2.6.11-ck2/drivers/net/tun.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/net/tun.c 2005-03-26 11:33:22.000000000 +1100 @@ -229,7 +229,7 @@ static __inline__ ssize_t tun_get_user(s size_t len = count; if (!(tun->flags & TUN_NO_PI)) { - if ((len -= sizeof(pi)) > len) + if ((len -= sizeof(pi)) > count) return -EINVAL; if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi))) diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/net/via-rhine.c linux-2.6.11-ck3/drivers/net/via-rhine.c --- linux-2.6.11-ck2/drivers/net/via-rhine.c 2005-03-02 19:30:26.000000000 +1100 +++ linux-2.6.11-ck3/drivers/net/via-rhine.c 2005-03-26 11:33:22.000000000 +1100 @@ -1197,8 +1197,10 @@ static int rhine_open(struct net_device dev->name, rp->pdev->irq); rc = alloc_ring(dev); - if (rc) + if (rc) { + free_irq(rp->pdev->irq, dev); return rc; + } alloc_rbufs(dev); alloc_tbufs(dev); rhine_chip_reset(dev); @@ -1899,6 +1901,9 @@ static void rhine_shutdown (struct devic struct rhine_private *rp = netdev_priv(dev); void __iomem *ioaddr = rp->base; + if (!(rp->quirks & rqWOL)) + return; /* Nothing to do for non-WOL adapters */ + rhine_power_init(dev); /* Make sure we use pattern 0, 1 and not 4, 5 */ diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/net/wan/hd6457x.c linux-2.6.11-ck3/drivers/net/wan/hd6457x.c --- linux-2.6.11-ck2/drivers/net/wan/hd6457x.c 2004-12-25 10:14:49.000000000 +1100 +++ linux-2.6.11-ck3/drivers/net/wan/hd6457x.c 2005-03-26 11:33:22.000000000 +1100 @@ -315,7 +315,7 @@ static inline void sca_rx(card_t *card, #endif stats->rx_packets++; stats->rx_bytes += skb->len; - skb->dev->last_rx = jiffies; + dev->last_rx = jiffies; skb->protocol = hdlc_type_trans(skb, dev); netif_rx(skb); } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/drivers/pci/hotplug/pciehp_ctrl.c linux-2.6.11-ck3/drivers/pci/hotplug/pciehp_ctrl.c --- linux-2.6.11-ck2/drivers/pci/hotplug/pciehp_ctrl.c 2004-12-25 10:14:49.000000000 +1100 +++ linux-2.6.11-ck3/drivers/pci/hotplug/pciehp_ctrl.c 2005-03-26 11:33:22.000000000 +1100 @@ -1354,10 +1354,11 @@ static u32 remove_board(struct pci_func dbg("PCI Bridge Hot-Remove s:b:d:f(%02x:%02x:%02x:%02x)\n", ctrl->seg, func->bus, func->device, func->function); bridge_slot_remove(func); - } else + } else { dbg("PCI Function Hot-Remove s:b:d:f(%02x:%02x:%02x:%02x)\n", ctrl->seg, func->bus, func->device, func->function); slot_remove(func); + } func = pciehp_slot_find(ctrl->slot_bus, device, 0); } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/fs/cramfs/inode.c linux-2.6.11-ck3/fs/cramfs/inode.c --- linux-2.6.11-ck2/fs/cramfs/inode.c 2004-05-23 12:54:54.000000000 +1000 +++ linux-2.6.11-ck3/fs/cramfs/inode.c 2005-03-26 11:33:22.000000000 +1100 @@ -70,6 +70,7 @@ static struct inode *get_cramfs_inode(st inode->i_data.a_ops = &cramfs_aops; } else { inode->i_size = 0; + inode->i_blocks = 0; init_special_inode(inode, inode->i_mode, old_decode_dev(cramfs_inode->size)); } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/fs/exec.c linux-2.6.11-ck3/fs/exec.c --- linux-2.6.11-ck2/fs/exec.c 2005-03-02 19:30:28.000000000 +1100 +++ linux-2.6.11-ck3/fs/exec.c 2005-03-26 11:33:22.000000000 +1100 @@ -814,7 +814,7 @@ void get_task_comm(char *buf, struct tas { /* buf must be at least sizeof(tsk->comm) in size */ task_lock(tsk); - memcpy(buf, tsk->comm, sizeof(tsk->comm)); + strncpy(buf, tsk->comm, sizeof(tsk->comm)); task_unlock(tsk); } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/kernel/signal.c linux-2.6.11-ck3/kernel/signal.c --- linux-2.6.11-ck2/kernel/signal.c 2005-03-02 19:30:30.000000000 +1100 +++ linux-2.6.11-ck3/kernel/signal.c 2005-03-26 11:33:22.000000000 +1100 @@ -1728,6 +1728,7 @@ do_signal_stop(int signr) * with another processor delivering a stop signal, * then the SIGCONT that wakes us up should clear it. */ + read_unlock(&tasklist_lock); return 0; } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/Makefile linux-2.6.11-ck3/Makefile --- linux-2.6.11-ck2/Makefile 2005-03-09 23:04:23.000000000 +1100 +++ linux-2.6.11-ck3/Makefile 2005-03-26 11:33:22.000000000 +1100 @@ -1,8 +1,8 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 11 -EXTRAVERSION = -ck2 -NAME=Numbat Woozy from Cognac +EXTRAVERSION = -ck3 +NAME=Woozy Numbat # *DOCUMENTATION* # To see a list of typical targets execute "make help" diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/net/ipv4/fib_hash.c linux-2.6.11-ck3/net/ipv4/fib_hash.c --- linux-2.6.11-ck2/net/ipv4/fib_hash.c 2005-03-02 19:30:30.000000000 +1100 +++ linux-2.6.11-ck3/net/ipv4/fib_hash.c 2005-03-26 11:33:22.000000000 +1100 @@ -919,13 +919,23 @@ out: return fa; } +static struct fib_alias *fib_get_idx(struct seq_file *seq, loff_t pos) +{ + struct fib_alias *fa = fib_get_first(seq); + + if (fa) + while (pos && (fa = fib_get_next(seq))) + --pos; + return pos ? NULL : fa; +} + static void *fib_seq_start(struct seq_file *seq, loff_t *pos) { void *v = NULL; read_lock(&fib_hash_lock); if (ip_fib_main_table) - v = *pos ? fib_get_next(seq) : SEQ_START_TOKEN; + v = *pos ? fib_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; return v; } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/net/ipv4/tcp_timer.c linux-2.6.11-ck3/net/ipv4/tcp_timer.c --- linux-2.6.11-ck2/net/ipv4/tcp_timer.c 2005-03-02 19:30:30.000000000 +1100 +++ linux-2.6.11-ck3/net/ipv4/tcp_timer.c 2005-03-26 11:33:22.000000000 +1100 @@ -38,6 +38,7 @@ static void tcp_keepalive_timer (unsigne #ifdef TCP_DEBUG const char tcp_timer_bug_msg[] = KERN_DEBUG "tcpbug: unknown timer value\n"; +EXPORT_SYMBOL(tcp_timer_bug_msg); #endif /* diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/net/netrom/nr_in.c linux-2.6.11-ck3/net/netrom/nr_in.c --- linux-2.6.11-ck2/net/netrom/nr_in.c 2004-03-11 21:28:52.000000000 +1100 +++ linux-2.6.11-ck3/net/netrom/nr_in.c 2005-03-26 11:33:22.000000000 +1100 @@ -74,7 +74,6 @@ static int nr_queue_rx_frame(struct sock static int nr_state1_machine(struct sock *sk, struct sk_buff *skb, int frametype) { - bh_lock_sock(sk); switch (frametype) { case NR_CONNACK: { nr_cb *nr = nr_sk(sk); @@ -103,8 +102,6 @@ static int nr_state1_machine(struct sock default: break; } - bh_unlock_sock(sk); - return 0; } @@ -116,7 +113,6 @@ static int nr_state1_machine(struct sock static int nr_state2_machine(struct sock *sk, struct sk_buff *skb, int frametype) { - bh_lock_sock(sk); switch (frametype) { case NR_CONNACK | NR_CHOKE_FLAG: nr_disconnect(sk, ECONNRESET); @@ -132,8 +128,6 @@ static int nr_state2_machine(struct sock default: break; } - bh_unlock_sock(sk); - return 0; } @@ -154,7 +148,6 @@ static int nr_state3_machine(struct sock nr = skb->data[18]; ns = skb->data[17]; - bh_lock_sock(sk); switch (frametype) { case NR_CONNREQ: nr_write_internal(sk, NR_CONNACK); @@ -265,8 +258,6 @@ static int nr_state3_machine(struct sock default: break; } - bh_unlock_sock(sk); - return queued; } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/net/xfrm/xfrm_state.c linux-2.6.11-ck3/net/xfrm/xfrm_state.c --- linux-2.6.11-ck2/net/xfrm/xfrm_state.c 2005-03-02 19:30:30.000000000 +1100 +++ linux-2.6.11-ck3/net/xfrm/xfrm_state.c 2005-03-26 11:33:22.000000000 +1100 @@ -609,7 +609,7 @@ static struct xfrm_state *__xfrm_find_ac for (i = 0; i < XFRM_DST_HSIZE; i++) { list_for_each_entry(x, xfrm_state_bydst+i, bydst) { - if (x->km.seq == seq) { + if (x->km.seq == seq && x->km.state == XFRM_STATE_ACQ) { xfrm_state_hold(x); return x; } diff -Naurp --exclude-from=/home/con/kernel/dontdiff linux-2.6.11-ck2/sound/pci/ac97/ac97_codec.c linux-2.6.11-ck3/sound/pci/ac97/ac97_codec.c --- linux-2.6.11-ck2/sound/pci/ac97/ac97_codec.c 2005-03-02 19:30:31.000000000 +1100 +++ linux-2.6.11-ck3/sound/pci/ac97/ac97_codec.c 2005-03-26 11:33:22.000000000 +1100 @@ -1185,7 +1185,7 @@ snd_kcontrol_t *snd_ac97_cnew(const snd_ /* * create mute switch(es) for normal stereo controls */ -static int snd_ac97_cmute_new(snd_card_t *card, char *name, int reg, ac97_t *ac97) +static int snd_ac97_cmute_new_stereo(snd_card_t *card, char *name, int reg, int check_stereo, ac97_t *ac97) { snd_kcontrol_t *kctl; int err; @@ -1196,7 +1196,7 @@ static int snd_ac97_cmute_new(snd_card_t mute_mask = 0x8000; val = snd_ac97_read(ac97, reg); - if (ac97->flags & AC97_STEREO_MUTES) { + if (check_stereo || (ac97->flags & AC97_STEREO_MUTES)) { /* check whether both mute bits work */ val1 = val | 0x8080; snd_ac97_write(ac97, reg, val1); @@ -1254,7 +1254,7 @@ static int snd_ac97_cvol_new(snd_card_t /* * create a mute-switch and a volume for normal stereo/mono controls */ -static int snd_ac97_cmix_new(snd_card_t *card, const char *pfx, int reg, ac97_t *ac97) +static int snd_ac97_cmix_new_stereo(snd_card_t *card, const char *pfx, int reg, int check_stereo, ac97_t *ac97) { int err; char name[44]; @@ -1265,7 +1265,7 @@ static int snd_ac97_cmix_new(snd_card_t if (snd_ac97_try_bit(ac97, reg, 15)) { sprintf(name, "%s Switch", pfx); - if ((err = snd_ac97_cmute_new(card, name, reg, ac97)) < 0) + if ((err = snd_ac97_cmute_new_stereo(card, name, reg, check_stereo, ac97)) < 0) return err; } check_volume_resolution(ac97, reg, &lo_max, &hi_max); @@ -1277,6 +1277,8 @@ static int snd_ac97_cmix_new(snd_card_t return 0; } +#define snd_ac97_cmix_new(card, pfx, reg, ac97) snd_ac97_cmix_new_stereo(card, pfx, reg, 0, ac97) +#define snd_ac97_cmute_new(card, name, reg, ac97) snd_ac97_cmute_new_stereo(card, name, reg, 0, ac97) static unsigned int snd_ac97_determine_spdif_rates(ac97_t *ac97); @@ -1327,7 +1329,8 @@ static int snd_ac97_mixer_build(ac97_t * /* build surround controls */ if (snd_ac97_try_volume_mix(ac97, AC97_SURROUND_MASTER)) { - if ((err = snd_ac97_cmix_new(card, "Surround Playback", AC97_SURROUND_MASTER, ac97)) < 0) + /* Surround Master (0x38) is with stereo mutes */ + if ((err = snd_ac97_cmix_new_stereo(card, "Surround Playback", AC97_SURROUND_MASTER, 1, ac97)) < 0) return err; }