Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.20-r6/0107-2.6.20.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1175 - (hide annotations) (download)
Thu Oct 14 12:15:46 2010 UTC (13 years, 7 months ago) by niro
File size: 39401 byte(s)
-2.6.20-alx-r6 new magellan 0.5.2 kernel
1 niro 1175 diff --git a/arch/i386/lib/usercopy.c b/arch/i386/lib/usercopy.c
2     index d22cfc9..086b372 100644
3     --- a/arch/i386/lib/usercopy.c
4     +++ b/arch/i386/lib/usercopy.c
5     @@ -10,6 +10,7 @@
6     #include <linux/blkdev.h>
7     #include <linux/module.h>
8     #include <linux/backing-dev.h>
9     +#include <linux/interrupt.h>
10     #include <asm/uaccess.h>
11     #include <asm/mmx.h>
12    
13     @@ -719,6 +720,14 @@ unsigned long __copy_to_user_ll(void __user *to, const void *from,
14     #ifndef CONFIG_X86_WP_WORKS_OK
15     if (unlikely(boot_cpu_data.wp_works_ok == 0) &&
16     ((unsigned long )to) < TASK_SIZE) {
17     + /*
18     + * When we are in an atomic section (see
19     + * mm/filemap.c:file_read_actor), return the full
20     + * length to take the slow path.
21     + */
22     + if (in_atomic())
23     + return n;
24     +
25     /*
26     * CPU does not honor the WP bit when writing
27     * from supervisory mode, and due to preemption or SMP,
28     diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
29     index dc2c082..21fb66f 100644
30     --- a/drivers/ata/ahci.c
31     +++ b/drivers/ata/ahci.c
32     @@ -82,6 +82,7 @@ enum {
33     board_ahci_pi = 1,
34     board_ahci_vt8251 = 2,
35     board_ahci_ign_iferr = 3,
36     + board_ahci_sb600 = 4,
37    
38     /* global controller registers */
39     HOST_CAP = 0x00, /* host capabilities */
40     @@ -173,6 +174,7 @@ enum {
41     AHCI_FLAG_NO_NCQ = (1 << 24),
42     AHCI_FLAG_IGN_IRQ_IF_ERR = (1 << 25), /* ignore IRQ_IF_ERR */
43     AHCI_FLAG_HONOR_PI = (1 << 26), /* honor PORTS_IMPL */
44     + AHCI_FLAG_IGN_SERR_INTERNAL = (1 << 27), /* ignore SERR_INTERNAL */
45     };
46    
47     struct ahci_cmd_hdr {
48     @@ -365,6 +367,18 @@ static const struct ata_port_info ahci_port_info[] = {
49     .udma_mask = 0x7f, /* udma0-6 ; FIXME */
50     .port_ops = &ahci_ops,
51     },
52     + /* board_ahci_sb600 */
53     + {
54     + .sht = &ahci_sht,
55     + .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
56     + ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
57     + ATA_FLAG_SKIP_D2H_BSY |
58     + AHCI_FLAG_IGN_SERR_INTERNAL,
59     + .pio_mask = 0x1f, /* pio0-4 */
60     + .udma_mask = 0x7f, /* udma0-6 ; FIXME */
61     + .port_ops = &ahci_ops,
62     + },
63     +
64     };
65    
66     static const struct pci_device_id ahci_pci_tbl[] = {
67     @@ -404,7 +418,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
68     { PCI_VDEVICE(JMICRON, 0x2366), board_ahci_ign_iferr }, /* JMB366 */
69    
70     /* ATI */
71     - { PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
72     + { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 non-raid */
73     { PCI_VDEVICE(ATI, 0x4381), board_ahci }, /* ATI SB600 raid */
74    
75     /* VIA */
76     @@ -1076,8 +1090,11 @@ static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
77     if (ap->flags & AHCI_FLAG_IGN_IRQ_IF_ERR)
78     irq_stat &= ~PORT_IRQ_IF_ERR;
79    
80     - if (irq_stat & PORT_IRQ_TF_ERR)
81     + if (irq_stat & PORT_IRQ_TF_ERR) {
82     err_mask |= AC_ERR_DEV;
83     + if (ap->flags & AHCI_FLAG_IGN_SERR_INTERNAL)
84     + serror &= ~SERR_INTERNAL;
85     + }
86    
87     if (irq_stat & (PORT_IRQ_HBUS_ERR | PORT_IRQ_HBUS_DATA_ERR)) {
88     err_mask |= AC_ERR_HOST_BUS;
89     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
90     index d6fcf0a..9a472c2 100644
91     --- a/drivers/ata/libata-core.c
92     +++ b/drivers/ata/libata-core.c
93     @@ -3316,7 +3316,6 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
94     { "WPI CDD-820", NULL, ATA_HORKAGE_NODMA },
95     { "SAMSUNG CD-ROM SC-148C", NULL, ATA_HORKAGE_NODMA },
96     { "SAMSUNG CD-ROM SC", NULL, ATA_HORKAGE_NODMA },
97     - { "SanDisk SDP3B-64", NULL, ATA_HORKAGE_NODMA },
98     { "ATAPI CD-ROM DRIVE 40X MAXIMUM",NULL,ATA_HORKAGE_NODMA },
99     { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },
100     { "SAMSUNG CD-ROM SN-124","N001", ATA_HORKAGE_NODMA },
101     @@ -3326,6 +3325,17 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
102     /* Devices where NCQ should be avoided */
103     /* NCQ is slow */
104     { "WDC WD740ADFD-00", NULL, ATA_HORKAGE_NONCQ },
105     + /* http://thread.gmane.org/gmane.linux.ide/14907 */
106     + { "FUJITSU MHT2060BH", NULL, ATA_HORKAGE_NONCQ },
107     + /* NCQ is broken */
108     + { "Maxtor 6L250S0", "BANC1G10", ATA_HORKAGE_NONCQ },
109     + /* NCQ hard hangs device under heavier load, needs hard power cycle */
110     + { "Maxtor 6B250S0", "BANC1B70", ATA_HORKAGE_NONCQ },
111     + /* Blacklist entries taken from Silicon Image 3124/3132
112     + Windows driver .inf file - also several Linux problem reports */
113     + { "HTS541060G9SA00", "MB3OC60D", ATA_HORKAGE_NONCQ, },
114     + { "HTS541080G9SA00", "MB4OC60D", ATA_HORKAGE_NONCQ, },
115     + { "HTS541010G9SA00", "MBZOC60D", ATA_HORKAGE_NONCQ, },
116    
117     /* Devices with NCQ limits */
118    
119     @@ -4742,8 +4752,8 @@ static void fill_result_tf(struct ata_queued_cmd *qc)
120     {
121     struct ata_port *ap = qc->ap;
122    
123     - ap->ops->tf_read(ap, &qc->result_tf);
124     qc->result_tf.flags = qc->tf.flags;
125     + ap->ops->tf_read(ap, &qc->result_tf);
126     }
127    
128     /**
129     diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
130     index 7484358..e1b0bff 100644
131     --- a/drivers/ata/libata-eh.c
132     +++ b/drivers/ata/libata-eh.c
133     @@ -954,26 +954,27 @@ static int ata_eh_read_log_10h(struct ata_device *dev,
134     * RETURNS:
135     * 0 on success, AC_ERR_* mask on failure
136     */
137     -static unsigned int atapi_eh_request_sense(struct ata_device *dev,
138     - unsigned char *sense_buf)
139     +static unsigned int atapi_eh_request_sense(struct ata_queued_cmd *qc)
140     {
141     + struct ata_device *dev = qc->dev;
142     + unsigned char *sense_buf = qc->scsicmd->sense_buffer;
143     struct ata_port *ap = dev->ap;
144     struct ata_taskfile tf;
145     u8 cdb[ATAPI_CDB_LEN];
146    
147     DPRINTK("ATAPI request sense\n");
148    
149     - ata_tf_init(dev, &tf);
150     -
151     /* FIXME: is this needed? */
152     memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE);
153    
154     - /* XXX: why tf_read here? */
155     - ap->ops->tf_read(ap, &tf);
156     -
157     - /* fill these in, for the case where they are -not- overwritten */
158     + /* initialize sense_buf with the error register,
159     + * for the case where they are -not- overwritten
160     + */
161     sense_buf[0] = 0x70;
162     - sense_buf[2] = tf.feature >> 4;
163     + sense_buf[2] = qc->result_tf.feature >> 4;
164     +
165     + /* some devices time out if garbage left in tf */
166     + ata_tf_init(dev, &tf);
167    
168     memset(cdb, 0, ATAPI_CDB_LEN);
169     cdb[0] = REQUEST_SENSE;
170     @@ -1137,8 +1138,7 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
171    
172     case ATA_DEV_ATAPI:
173     if (!(qc->ap->pflags & ATA_PFLAG_FROZEN)) {
174     - tmp = atapi_eh_request_sense(qc->dev,
175     - qc->scsicmd->sense_buffer);
176     + tmp = atapi_eh_request_sense(qc);
177     if (!tmp) {
178     /* ATA_QCFLAG_SENSE_VALID is used to
179     * tell atapi_qc_complete() that sense
180     diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
181     index 1790542..fc436f6 100644
182     --- a/drivers/ata/libata-scsi.c
183     +++ b/drivers/ata/libata-scsi.c
184     @@ -295,7 +295,7 @@ int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
185     scsi_cmd[8] = args[3];
186     scsi_cmd[10] = args[4];
187     scsi_cmd[12] = args[5];
188     - scsi_cmd[13] = args[6] & 0x0f;
189     + scsi_cmd[13] = args[6] & 0x4f;
190     scsi_cmd[14] = args[0];
191    
192     /* Good values for timeout and retries? Values below
193     diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
194     index 5cb2500..1ecad3e 100644
195     --- a/drivers/hid/hid-core.c
196     +++ b/drivers/hid/hid-core.c
197     @@ -975,7 +975,7 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i
198    
199     if (size < rsize) {
200     dbg("report %d is too short, (%d < %d)", report->id, size, rsize);
201     - return -1;
202     + memset(data + size, 0, rsize - size);
203     }
204    
205     if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_report_event)
206     diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
207     index 99d1c43..d6ff4f2 100644
208     --- a/drivers/ide/ide-io.c
209     +++ b/drivers/ide/ide-io.c
210     @@ -519,21 +519,24 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8
211     if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ && hwif->err_stops_fifo == 0)
212     try_to_flush_leftover_data(drive);
213    
214     + if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) {
215     + ide_kill_rq(drive, rq);
216     + return ide_stopped;
217     + }
218     +
219     if (hwif->INB(IDE_STATUS_REG) & (BUSY_STAT|DRQ_STAT))
220     - /* force an abort */
221     - hwif->OUTB(WIN_IDLEIMMEDIATE, IDE_COMMAND_REG);
222     + rq->errors |= ERROR_RESET;
223    
224     - if (rq->errors >= ERROR_MAX || blk_noretry_request(rq))
225     - ide_kill_rq(drive, rq);
226     - else {
227     - if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
228     - ++rq->errors;
229     - return ide_do_reset(drive);
230     - }
231     - if ((rq->errors & ERROR_RECAL) == ERROR_RECAL)
232     - drive->special.b.recalibrate = 1;
233     + if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
234     ++rq->errors;
235     + return ide_do_reset(drive);
236     }
237     +
238     + if ((rq->errors & ERROR_RECAL) == ERROR_RECAL)
239     + drive->special.b.recalibrate = 1;
240     +
241     + ++rq->errors;
242     +
243     return ide_stopped;
244     }
245    
246     @@ -1025,6 +1028,13 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq)
247     if (!drive->special.all) {
248     ide_driver_t *drv;
249    
250     + /*
251     + * We reset the drive so we need to issue a SETFEATURES.
252     + * Do it _after_ do_special() restored device parameters.
253     + */
254     + if (drive->current_speed == 0xff)
255     + ide_config_drive_speed(drive, drive->desired_speed);
256     +
257     if (rq->cmd_type == REQ_TYPE_ATA_CMD ||
258     rq->cmd_type == REQ_TYPE_ATA_TASK ||
259     rq->cmd_type == REQ_TYPE_ATA_TASKFILE)
260     diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
261     index 59b10a0..133d9cd 100644
262     --- a/drivers/ide/ide-iops.c
263     +++ b/drivers/ide/ide-iops.c
264     @@ -1123,6 +1123,9 @@ static void pre_reset(ide_drive_t *drive)
265     if (HWIF(drive)->pre_reset != NULL)
266     HWIF(drive)->pre_reset(drive);
267    
268     + if (drive->current_speed != 0xff)
269     + drive->desired_speed = drive->current_speed;
270     + drive->current_speed = 0xff;
271     }
272    
273     /*
274     diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
275     index 059704f..cef1287 100644
276     --- a/drivers/md/bitmap.c
277     +++ b/drivers/md/bitmap.c
278     @@ -863,9 +863,7 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start)
279    
280     /* We need 4 bits per page, rounded up to a multiple of sizeof(unsigned long) */
281     bitmap->filemap_attr = kzalloc(
282     - (((num_pages*4/8)+sizeof(unsigned long)-1)
283     - /sizeof(unsigned long))
284     - *sizeof(unsigned long),
285     + roundup( DIV_ROUND_UP(num_pages*4, 8), sizeof(unsigned long)),
286     GFP_KERNEL);
287     if (!bitmap->filemap_attr)
288     goto out;
289     diff --git a/drivers/media/dvb/frontends/tda10086.c b/drivers/media/dvb/frontends/tda10086.c
290     index 4c27a2d..ccc429c 100644
291     --- a/drivers/media/dvb/frontends/tda10086.c
292     +++ b/drivers/media/dvb/frontends/tda10086.c
293     @@ -212,7 +212,7 @@ static int tda10086_send_master_cmd (struct dvb_frontend* fe,
294     for(i=0; i< cmd->msg_len; i++) {
295     tda10086_write_byte(state, 0x48+i, cmd->msg[i]);
296     }
297     - tda10086_write_byte(state, 0x36, 0x08 | ((cmd->msg_len + 1) << 4));
298     + tda10086_write_byte(state, 0x36, 0x08 | ((cmd->msg_len - 1) << 4));
299    
300     tda10086_diseqc_wait(state);
301    
302     diff --git a/drivers/media/dvb/pluto2/pluto2.c b/drivers/media/dvb/pluto2/pluto2.c
303     index ffda71d..058df5c 100644
304     --- a/drivers/media/dvb/pluto2/pluto2.c
305     +++ b/drivers/media/dvb/pluto2/pluto2.c
306     @@ -149,6 +149,15 @@ static inline void pluto_rw(struct pluto *pluto, u32 reg, u32 mask, u32 bits)
307     writel(val, &pluto->io_mem[reg]);
308     }
309    
310     +static void pluto_write_tscr(struct pluto *pluto, u32 val)
311     +{
312     + /* set the number of packets */
313     + val &= ~TSCR_ADEF;
314     + val |= TS_DMA_PACKETS / 2;
315     +
316     + pluto_writereg(pluto, REG_TSCR, val);
317     +}
318     +
319     static void pluto_setsda(void *data, int state)
320     {
321     struct pluto *pluto = data;
322     @@ -213,11 +222,11 @@ static void pluto_reset_ts(struct pluto *pluto, int reenable)
323    
324     if (val & TSCR_RSTN) {
325     val &= ~TSCR_RSTN;
326     - pluto_writereg(pluto, REG_TSCR, val);
327     + pluto_write_tscr(pluto, val);
328     }
329     if (reenable) {
330     val |= TSCR_RSTN;
331     - pluto_writereg(pluto, REG_TSCR, val);
332     + pluto_write_tscr(pluto, val);
333     }
334     }
335    
336     @@ -339,7 +348,7 @@ static irqreturn_t pluto_irq(int irq, void *dev_id)
337     }
338    
339     /* ACK the interrupt */
340     - pluto_writereg(pluto, REG_TSCR, tscr | TSCR_IACK);
341     + pluto_write_tscr(pluto, tscr | TSCR_IACK);
342    
343     return IRQ_HANDLED;
344     }
345     @@ -348,9 +357,6 @@ static void __devinit pluto_enable_irqs(struct pluto *pluto)
346     {
347     u32 val = pluto_readreg(pluto, REG_TSCR);
348    
349     - /* set the number of packets */
350     - val &= ~TSCR_ADEF;
351     - val |= TS_DMA_PACKETS / 2;
352     /* disable AFUL and LOCK interrupts */
353     val |= (TSCR_MSKA | TSCR_MSKL);
354     /* enable DMA and OVERFLOW interrupts */
355     @@ -358,7 +364,7 @@ static void __devinit pluto_enable_irqs(struct pluto *pluto)
356     /* clear pending interrupts */
357     val |= TSCR_IACK;
358    
359     - pluto_writereg(pluto, REG_TSCR, val);
360     + pluto_write_tscr(pluto, val);
361     }
362    
363     static void pluto_disable_irqs(struct pluto *pluto)
364     @@ -370,7 +376,7 @@ static void pluto_disable_irqs(struct pluto *pluto)
365     /* clear pending interrupts */
366     val |= TSCR_IACK;
367    
368     - pluto_writereg(pluto, REG_TSCR, val);
369     + pluto_write_tscr(pluto, val);
370     }
371    
372     static int __devinit pluto_hw_init(struct pluto *pluto)
373     diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
374     index 35ad5cf..99304b2 100644
375     --- a/drivers/net/8139too.c
376     +++ b/drivers/net/8139too.c
377     @@ -1109,6 +1109,8 @@ static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
378    
379     assert (dev != NULL);
380    
381     + flush_scheduled_work();
382     +
383     unregister_netdev (dev);
384    
385     __rtl8139_cleanup_dev (dev);
386     @@ -1603,18 +1605,21 @@ static void rtl8139_thread (struct work_struct *work)
387     struct net_device *dev = tp->mii.dev;
388     unsigned long thr_delay = next_tick;
389    
390     + rtnl_lock();
391     +
392     + if (!netif_running(dev))
393     + goto out_unlock;
394     +
395     if (tp->watchdog_fired) {
396     tp->watchdog_fired = 0;
397     rtl8139_tx_timeout_task(work);
398     - } else if (rtnl_trylock()) {
399     - rtl8139_thread_iter (dev, tp, tp->mmio_addr);
400     - rtnl_unlock ();
401     - } else {
402     - /* unlikely race. mitigate with fast poll. */
403     - thr_delay = HZ / 2;
404     - }
405     + } else
406     + rtl8139_thread_iter(dev, tp, tp->mmio_addr);
407    
408     - schedule_delayed_work(&tp->thread, thr_delay);
409     + if (tp->have_thread)
410     + schedule_delayed_work(&tp->thread, thr_delay);
411     +out_unlock:
412     + rtnl_unlock ();
413     }
414    
415     static void rtl8139_start_thread(struct rtl8139_private *tp)
416     @@ -1626,19 +1631,11 @@ static void rtl8139_start_thread(struct rtl8139_private *tp)
417     return;
418    
419     tp->have_thread = 1;
420     + tp->watchdog_fired = 0;
421    
422     schedule_delayed_work(&tp->thread, next_tick);
423     }
424    
425     -static void rtl8139_stop_thread(struct rtl8139_private *tp)
426     -{
427     - if (tp->have_thread) {
428     - cancel_rearming_delayed_work(&tp->thread);
429     - tp->have_thread = 0;
430     - } else
431     - flush_scheduled_work();
432     -}
433     -
434     static inline void rtl8139_tx_clear (struct rtl8139_private *tp)
435     {
436     tp->cur_tx = 0;
437     @@ -1696,12 +1693,11 @@ static void rtl8139_tx_timeout (struct net_device *dev)
438     {
439     struct rtl8139_private *tp = netdev_priv(dev);
440    
441     + tp->watchdog_fired = 1;
442     if (!tp->have_thread) {
443     - INIT_DELAYED_WORK(&tp->thread, rtl8139_tx_timeout_task);
444     + INIT_DELAYED_WORK(&tp->thread, rtl8139_thread);
445     schedule_delayed_work(&tp->thread, next_tick);
446     - } else
447     - tp->watchdog_fired = 1;
448     -
449     + }
450     }
451    
452     static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev)
453     @@ -2233,8 +2229,6 @@ static int rtl8139_close (struct net_device *dev)
454    
455     netif_stop_queue (dev);
456    
457     - rtl8139_stop_thread(tp);
458     -
459     if (netif_msg_ifdown(tp))
460     printk(KERN_DEBUG "%s: Shutting down ethercard, status was 0x%4.4x.\n",
461     dev->name, RTL_R16 (IntrStatus));
462     diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
463     index ca2b21f..07b4c0d 100644
464     --- a/drivers/net/ifb.c
465     +++ b/drivers/net/ifb.c
466     @@ -96,17 +96,24 @@ static void ri_tasklet(unsigned long dev)
467     skb->tc_verd = SET_TC_NCLS(skb->tc_verd);
468     stats->tx_packets++;
469     stats->tx_bytes +=skb->len;
470     +
471     + skb->dev = __dev_get_by_index(skb->iif);
472     + if (!skb->dev) {
473     + dev_kfree_skb(skb);
474     + stats->tx_dropped++;
475     + break;
476     + }
477     + skb->iif = _dev->ifindex;
478     +
479     if (from & AT_EGRESS) {
480     dp->st_rx_frm_egr++;
481     dev_queue_xmit(skb);
482     } else if (from & AT_INGRESS) {
483     -
484     dp->st_rx_frm_ing++;
485     + skb_pull(skb, skb->dev->hard_header_len);
486     netif_rx(skb);
487     - } else {
488     - dev_kfree_skb(skb);
489     - stats->tx_dropped++;
490     - }
491     + } else
492     + BUG();
493     }
494    
495     if (netif_tx_trylock(_dev)) {
496     @@ -157,26 +164,10 @@ static int ifb_xmit(struct sk_buff *skb, struct net_device *dev)
497     stats->rx_packets++;
498     stats->rx_bytes+=skb->len;
499    
500     - if (!from || !skb->input_dev) {
501     -dropped:
502     + if (!(from & (AT_INGRESS|AT_EGRESS)) || !skb->iif) {
503     dev_kfree_skb(skb);
504     stats->rx_dropped++;
505     return ret;
506     - } else {
507     - /*
508     - * note we could be going
509     - * ingress -> egress or
510     - * egress -> ingress
511     - */
512     - skb->dev = skb->input_dev;
513     - skb->input_dev = dev;
514     - if (from & AT_INGRESS) {
515     - skb_pull(skb, skb->dev->hard_header_len);
516     - } else {
517     - if (!(from & AT_EGRESS)) {
518     - goto dropped;
519     - }
520     - }
521     }
522    
523     if (skb_queue_len(&dp->rq) >= dev->tx_queue_len) {
524     diff --git a/drivers/net/skge.c b/drivers/net/skge.c
525     index 45283f3..9bc9427 100644
526     --- a/drivers/net/skge.c
527     +++ b/drivers/net/skge.c
528     @@ -2462,6 +2462,7 @@ static int skge_down(struct net_device *dev)
529     printk(KERN_INFO PFX "%s: disabling interface\n", dev->name);
530    
531     netif_stop_queue(dev);
532     + netif_carrier_off(dev);
533     if (hw->chip_id == CHIP_ID_GENESIS && hw->phy_type == SK_PHY_XMAC)
534     cancel_rearming_delayed_work(&skge->link_thread);
535    
536     diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
537     index f44c397..38e75cf 100644
538     --- a/drivers/net/sky2.c
539     +++ b/drivers/net/sky2.c
540     @@ -524,9 +524,9 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
541     ledover &= ~PHY_M_LED_MO_RX;
542     }
543    
544     - if (hw->chip_id == CHIP_ID_YUKON_EC_U && hw->chip_rev == CHIP_REV_YU_EC_A1) {
545     + if (hw->chip_id == CHIP_ID_YUKON_EC_U &&
546     + hw->chip_rev == CHIP_REV_YU_EC_U_A1) {
547     /* apply fixes in PHY AFE */
548     - pg = gm_phy_read(hw, port, PHY_MARV_EXT_ADR);
549     gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 255);
550    
551     /* increase differential signal amplitude in 10BASE-T */
552     @@ -538,7 +538,7 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
553     gm_phy_write(hw, port, 0x17, 0x2002);
554    
555     /* set page register to 0 */
556     - gm_phy_write(hw, port, PHY_MARV_EXT_ADR, pg);
557     + gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0);
558     } else {
559     gm_phy_write(hw, port, PHY_MARV_LED_CTRL, ledctrl);
560    
561     @@ -1506,6 +1506,7 @@ static int sky2_down(struct net_device *dev)
562    
563     /* Stop more packets from being queued */
564     netif_stop_queue(dev);
565     + netif_carrier_off(dev);
566    
567     /* Disable port IRQ */
568     imask = sky2_read32(hw, B0_IMSK);
569     @@ -1802,38 +1803,22 @@ static void sky2_tx_timeout(struct net_device *dev)
570     {
571     struct sky2_port *sky2 = netdev_priv(dev);
572     struct sky2_hw *hw = sky2->hw;
573     - unsigned txq = txqaddr[sky2->port];
574     - u16 report, done;
575     + unsigned port = sky2->port;
576    
577     if (netif_msg_timer(sky2))
578     printk(KERN_ERR PFX "%s: tx timeout\n", dev->name);
579    
580     - report = sky2_read16(hw, sky2->port == 0 ? STAT_TXA1_RIDX : STAT_TXA2_RIDX);
581     - done = sky2_read16(hw, Q_ADDR(txq, Q_DONE));
582     -
583     - printk(KERN_DEBUG PFX "%s: transmit ring %u .. %u report=%u done=%u\n",
584     - dev->name,
585     - sky2->tx_cons, sky2->tx_prod, report, done);
586     -
587     - if (report != done) {
588     - printk(KERN_INFO PFX "status burst pending (irq moderation?)\n");
589     -
590     - sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
591     - sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
592     - } else if (report != sky2->tx_cons) {
593     - printk(KERN_INFO PFX "status report lost?\n");
594     - sky2_tx_complete(sky2, report);
595     - } else {
596     - printk(KERN_INFO PFX "hardware hung? flushing\n");
597     -
598     - sky2_write32(hw, Q_ADDR(txq, Q_CSR), BMU_STOP);
599     - sky2_write32(hw, Y2_QADDR(txq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET);
600     + /* Get information for bug report :-) */
601     + printk(KERN_INFO PFX "%s: transmit ring %u .. %u report=%u done=%u\n",
602     + dev->name, sky2->tx_cons, sky2->tx_prod,
603     + sky2_read16(hw, port == 0 ? STAT_TXA1_RIDX : STAT_TXA2_RIDX),
604     + sky2_read16(hw, Q_ADDR(txqaddr[sky2->port], Q_DONE)));
605    
606     - sky2_tx_complete(sky2, sky2->tx_prod);
607     + printk(KERN_INFO PFX "gmac control %#x status %#x\n",
608     + gma_read16(hw, port, GM_GP_CTRL), gma_read16(hw, port, GM_GP_STAT));
609    
610     - sky2_qset(hw, txq);
611     - sky2_prefetch_init(hw, txq, sky2->tx_le_map, TX_RING_SIZE - 1);
612     - }
613     + /* can't restart safely under softirq */
614     + schedule_work(&hw->restart_work);
615     }
616    
617     static int sky2_change_mtu(struct net_device *dev, int new_mtu)
618     @@ -2436,6 +2421,10 @@ static int sky2_reset(struct sky2_hw *hw)
619     return -EOPNOTSUPP;
620     }
621    
622     + /* Make sure and enable all clocks */
623     + if (hw->chip_id == CHIP_ID_YUKON_EC_U)
624     + sky2_pci_write32(hw, PCI_DEV_REG3, 0);
625     +
626     hw->chip_rev = (sky2_read8(hw, B2_MAC_CFG) & CFG_CHIP_R_MSK) >> 4;
627    
628     /* This rev is really old, and requires untested workarounds */
629     @@ -2565,6 +2554,49 @@ static int sky2_reset(struct sky2_hw *hw)
630     return 0;
631     }
632    
633     +static void sky2_restart(struct work_struct *work)
634     +{
635     + struct sky2_hw *hw = container_of(work, struct sky2_hw, restart_work);
636     + struct net_device *dev;
637     + int i, err;
638     +
639     + dev_dbg(&hw->pdev->dev, "restarting\n");
640     +
641     + del_timer_sync(&hw->idle_timer);
642     +
643     + rtnl_lock();
644     + sky2_write32(hw, B0_IMSK, 0);
645     + sky2_read32(hw, B0_IMSK);
646     +
647     + netif_poll_disable(hw->dev[0]);
648     +
649     + for (i = 0; i < hw->ports; i++) {
650     + dev = hw->dev[i];
651     + if (netif_running(dev))
652     + sky2_down(dev);
653     + }
654     +
655     + sky2_reset(hw);
656     + sky2_write32(hw, B0_IMSK, Y2_IS_BASE);
657     + netif_poll_enable(hw->dev[0]);
658     +
659     + for (i = 0; i < hw->ports; i++) {
660     + dev = hw->dev[i];
661     + if (netif_running(dev)) {
662     + err = sky2_up(dev);
663     + if (err) {
664     + printk(KERN_INFO PFX "%s: could not restart %d\n",
665     + dev->name, err);
666     + dev_close(dev);
667     + }
668     + }
669     + }
670     +
671     + sky2_idle_start(hw);
672     +
673     + rtnl_unlock();
674     +}
675     +
676     static u32 sky2_supported_modes(const struct sky2_hw *hw)
677     {
678     if (sky2_is_copper(hw)) {
679     @@ -3508,6 +3540,8 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
680     }
681    
682     setup_timer(&hw->idle_timer, sky2_idle, (unsigned long) hw);
683     + INIT_WORK(&hw->restart_work, sky2_restart);
684     +
685     sky2_idle_start(hw);
686    
687     pci_set_drvdata(pdev, hw);
688     @@ -3609,6 +3643,9 @@ static int sky2_resume(struct pci_dev *pdev)
689    
690     pci_restore_state(pdev);
691     pci_enable_wake(pdev, PCI_D0, 0);
692     +
693     + if (hw->chip_id == CHIP_ID_YUKON_EC_U)
694     + sky2_pci_write32(hw, PCI_DEV_REG3, 0);
695     sky2_set_power_state(hw, PCI_D0);
696    
697     err = sky2_reset(hw);
698     diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h
699     index 148aab2..5193714 100644
700     --- a/drivers/net/sky2.h
701     +++ b/drivers/net/sky2.h
702     @@ -1898,6 +1898,7 @@ struct sky2_hw {
703     dma_addr_t st_dma;
704    
705     struct timer_list idle_timer;
706     + struct work_struct restart_work;
707     int msi;
708     wait_queue_head_t msi_wait;
709     };
710     diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
711     index 2ecb6ff..e71a8e6 100644
712     --- a/drivers/scsi/scsi_error.c
713     +++ b/drivers/scsi/scsi_error.c
714     @@ -595,7 +595,7 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
715     */
716     if (copy_sense) {
717     if (!SCSI_SENSE_VALID(scmd)) {
718     - memcpy(scmd->sense_buffer, scmd->request_buffer,
719     + memcpy(scmd->sense_buffer, page_address(sgl.page),
720     sizeof(scmd->sense_buffer));
721     }
722     __free_page(sgl.page);
723     diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
724     index 51db118..b172b01 100644
725     --- a/fs/binfmt_elf.c
726     +++ b/fs/binfmt_elf.c
727     @@ -1704,7 +1704,10 @@ static int elf_core_dump(long signr, struct pt_regs *regs, struct file *file)
728     DUMP_SEEK(PAGE_SIZE);
729     } else {
730     if (page == ZERO_PAGE(addr)) {
731     - DUMP_SEEK(PAGE_SIZE);
732     + if (!dump_seek(file, PAGE_SIZE)) {
733     + page_cache_release(page);
734     + goto end_coredump;
735     + }
736     } else {
737     void *kaddr;
738     flush_cache_page(vma, addr,
739     diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
740     index a4d933a..a852eb7 100644
741     --- a/fs/binfmt_elf_fdpic.c
742     +++ b/fs/binfmt_elf_fdpic.c
743     @@ -1473,8 +1473,8 @@ static int elf_fdpic_dump_segments(struct file *file, struct mm_struct *mm,
744     DUMP_SEEK(file->f_pos + PAGE_SIZE);
745     }
746     else if (page == ZERO_PAGE(addr)) {
747     - DUMP_SEEK(file->f_pos + PAGE_SIZE);
748     page_cache_release(page);
749     + DUMP_SEEK(file->f_pos + PAGE_SIZE);
750     }
751     else {
752     void *kaddr;
753     diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c
754     index beaf25f..03ba5bc 100644
755     --- a/fs/ext3/inode.c
756     +++ b/fs/ext3/inode.c
757     @@ -1148,102 +1148,37 @@ static int do_journal_get_write_access(handle_t *handle,
758     return ext3_journal_get_write_access(handle, bh);
759     }
760    
761     -/*
762     - * The idea of this helper function is following:
763     - * if prepare_write has allocated some blocks, but not all of them, the
764     - * transaction must include the content of the newly allocated blocks.
765     - * This content is expected to be set to zeroes by block_prepare_write().
766     - * 2006/10/14 SAW
767     - */
768     -static int ext3_prepare_failure(struct file *file, struct page *page,
769     - unsigned from, unsigned to)
770     -{
771     - struct address_space *mapping;
772     - struct buffer_head *bh, *head, *next;
773     - unsigned block_start, block_end;
774     - unsigned blocksize;
775     - int ret;
776     - handle_t *handle = ext3_journal_current_handle();
777     -
778     - mapping = page->mapping;
779     - if (ext3_should_writeback_data(mapping->host)) {
780     - /* optimization: no constraints about data */
781     -skip:
782     - return ext3_journal_stop(handle);
783     - }
784     -
785     - head = page_buffers(page);
786     - blocksize = head->b_size;
787     - for ( bh = head, block_start = 0;
788     - bh != head || !block_start;
789     - block_start = block_end, bh = next)
790     - {
791     - next = bh->b_this_page;
792     - block_end = block_start + blocksize;
793     - if (block_end <= from)
794     - continue;
795     - if (block_start >= to) {
796     - block_start = to;
797     - break;
798     - }
799     - if (!buffer_mapped(bh))
800     - /* prepare_write failed on this bh */
801     - break;
802     - if (ext3_should_journal_data(mapping->host)) {
803     - ret = do_journal_get_write_access(handle, bh);
804     - if (ret) {
805     - ext3_journal_stop(handle);
806     - return ret;
807     - }
808     - }
809     - /*
810     - * block_start here becomes the first block where the current iteration
811     - * of prepare_write failed.
812     - */
813     - }
814     - if (block_start <= from)
815     - goto skip;
816     -
817     - /* commit allocated and zeroed buffers */
818     - return mapping->a_ops->commit_write(file, page, from, block_start);
819     -}
820     -
821     static int ext3_prepare_write(struct file *file, struct page *page,
822     unsigned from, unsigned to)
823     {
824     struct inode *inode = page->mapping->host;
825     - int ret, ret2;
826     - int needed_blocks = ext3_writepage_trans_blocks(inode);
827     + int ret, needed_blocks = ext3_writepage_trans_blocks(inode);
828     handle_t *handle;
829     int retries = 0;
830    
831     retry:
832     handle = ext3_journal_start(inode, needed_blocks);
833     - if (IS_ERR(handle))
834     - return PTR_ERR(handle);
835     + if (IS_ERR(handle)) {
836     + ret = PTR_ERR(handle);
837     + goto out;
838     + }
839     if (test_opt(inode->i_sb, NOBH) && ext3_should_writeback_data(inode))
840     ret = nobh_prepare_write(page, from, to, ext3_get_block);
841     else
842     ret = block_prepare_write(page, from, to, ext3_get_block);
843     if (ret)
844     - goto failure;
845     + goto prepare_write_failed;
846    
847     if (ext3_should_journal_data(inode)) {
848     ret = walk_page_buffers(handle, page_buffers(page),
849     from, to, NULL, do_journal_get_write_access);
850     - if (ret)
851     - /* fatal error, just put the handle and return */
852     - journal_stop(handle);
853     }
854     - return ret;
855     -
856     -failure:
857     - ret2 = ext3_prepare_failure(file, page, from, to);
858     - if (ret2 < 0)
859     - return ret2;
860     +prepare_write_failed:
861     + if (ret)
862     + ext3_journal_stop(handle);
863     if (ret == -ENOSPC && ext3_should_retry_alloc(inode->i_sb, &retries))
864     goto retry;
865     - /* retry number exceeded, or other error like -EDQUOT */
866     +out:
867     return ret;
868     }
869    
870     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
871     index a127cc0..0a60ec5 100644
872     --- a/fs/ext4/inode.c
873     +++ b/fs/ext4/inode.c
874     @@ -1147,102 +1147,37 @@ static int do_journal_get_write_access(handle_t *handle,
875     return ext4_journal_get_write_access(handle, bh);
876     }
877    
878     -/*
879     - * The idea of this helper function is following:
880     - * if prepare_write has allocated some blocks, but not all of them, the
881     - * transaction must include the content of the newly allocated blocks.
882     - * This content is expected to be set to zeroes by block_prepare_write().
883     - * 2006/10/14 SAW
884     - */
885     -static int ext4_prepare_failure(struct file *file, struct page *page,
886     - unsigned from, unsigned to)
887     -{
888     - struct address_space *mapping;
889     - struct buffer_head *bh, *head, *next;
890     - unsigned block_start, block_end;
891     - unsigned blocksize;
892     - int ret;
893     - handle_t *handle = ext4_journal_current_handle();
894     -
895     - mapping = page->mapping;
896     - if (ext4_should_writeback_data(mapping->host)) {
897     - /* optimization: no constraints about data */
898     -skip:
899     - return ext4_journal_stop(handle);
900     - }
901     -
902     - head = page_buffers(page);
903     - blocksize = head->b_size;
904     - for ( bh = head, block_start = 0;
905     - bh != head || !block_start;
906     - block_start = block_end, bh = next)
907     - {
908     - next = bh->b_this_page;
909     - block_end = block_start + blocksize;
910     - if (block_end <= from)
911     - continue;
912     - if (block_start >= to) {
913     - block_start = to;
914     - break;
915     - }
916     - if (!buffer_mapped(bh))
917     - /* prepare_write failed on this bh */
918     - break;
919     - if (ext4_should_journal_data(mapping->host)) {
920     - ret = do_journal_get_write_access(handle, bh);
921     - if (ret) {
922     - ext4_journal_stop(handle);
923     - return ret;
924     - }
925     - }
926     - /*
927     - * block_start here becomes the first block where the current iteration
928     - * of prepare_write failed.
929     - */
930     - }
931     - if (block_start <= from)
932     - goto skip;
933     -
934     - /* commit allocated and zeroed buffers */
935     - return mapping->a_ops->commit_write(file, page, from, block_start);
936     -}
937     -
938     static int ext4_prepare_write(struct file *file, struct page *page,
939     unsigned from, unsigned to)
940     {
941     struct inode *inode = page->mapping->host;
942     - int ret, ret2;
943     - int needed_blocks = ext4_writepage_trans_blocks(inode);
944     + int ret, needed_blocks = ext4_writepage_trans_blocks(inode);
945     handle_t *handle;
946     int retries = 0;
947    
948     retry:
949     handle = ext4_journal_start(inode, needed_blocks);
950     - if (IS_ERR(handle))
951     - return PTR_ERR(handle);
952     + if (IS_ERR(handle)) {
953     + ret = PTR_ERR(handle);
954     + goto out;
955     + }
956     if (test_opt(inode->i_sb, NOBH) && ext4_should_writeback_data(inode))
957     ret = nobh_prepare_write(page, from, to, ext4_get_block);
958     else
959     ret = block_prepare_write(page, from, to, ext4_get_block);
960     if (ret)
961     - goto failure;
962     + goto prepare_write_failed;
963    
964     if (ext4_should_journal_data(inode)) {
965     ret = walk_page_buffers(handle, page_buffers(page),
966     from, to, NULL, do_journal_get_write_access);
967     - if (ret)
968     - /* fatal error, just put the handle and return */
969     - ext4_journal_stop(handle);
970     }
971     - return ret;
972     -
973     -failure:
974     - ret2 = ext4_prepare_failure(file, page, from, to);
975     - if (ret2 < 0)
976     - return ret2;
977     +prepare_write_failed:
978     + if (ret)
979     + ext4_journal_stop(handle);
980     if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
981     goto retry;
982     - /* retry number exceeded, or other error like -EDQUOT */
983     +out:
984     return ret;
985     }
986    
987     diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
988     index e695660..c1ba275 100644
989     --- a/fs/nfsd/nfs3xdr.c
990     +++ b/fs/nfsd/nfs3xdr.c
991     @@ -844,8 +844,8 @@ compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,
992     #define NFS3_ENTRY_BAGGAGE (2 + 1 + 2 + 1)
993     #define NFS3_ENTRYPLUS_BAGGAGE (1 + 21 + 1 + (NFS3_FHSIZE >> 2))
994     static int
995     -encode_entry(struct readdir_cd *ccd, const char *name,
996     - int namlen, off_t offset, ino_t ino, unsigned int d_type, int plus)
997     +encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
998     + loff_t offset, ino_t ino, unsigned int d_type, int plus)
999     {
1000     struct nfsd3_readdirres *cd = container_of(ccd, struct nfsd3_readdirres,
1001     common);
1002     @@ -865,7 +865,7 @@ encode_entry(struct readdir_cd *ccd, const char *name,
1003     *cd->offset1 = htonl(offset64 & 0xffffffff);
1004     cd->offset1 = NULL;
1005     } else {
1006     - xdr_encode_hyper(cd->offset, (u64) offset);
1007     + xdr_encode_hyper(cd->offset, offset64);
1008     }
1009     }
1010    
1011     diff --git a/include/linux/ide.h b/include/linux/ide.h
1012     index 3808698..63e111e 100644
1013     --- a/include/linux/ide.h
1014     +++ b/include/linux/ide.h
1015     @@ -607,6 +607,7 @@ typedef struct ide_drive_s {
1016     u8 init_speed; /* transfer rate set at boot */
1017     u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */
1018     u8 current_speed; /* current transfer rate set */
1019     + u8 desired_speed; /* desired transfer rate set */
1020     u8 dn; /* now wide spread use */
1021     u8 wcache; /* status of write cache */
1022     u8 acoustic; /* acoustic management */
1023     diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
1024     index 4ff3940..82f43ad 100644
1025     --- a/include/linux/skbuff.h
1026     +++ b/include/linux/skbuff.h
1027     @@ -188,7 +188,7 @@ enum {
1028     * @sk: Socket we are owned by
1029     * @tstamp: Time we arrived
1030     * @dev: Device we arrived on/are leaving by
1031     - * @input_dev: Device we arrived on
1032     + * @iif: ifindex of device we arrived on
1033     * @h: Transport layer header
1034     * @nh: Network layer header
1035     * @mac: Link layer header
1036     @@ -235,7 +235,8 @@ struct sk_buff {
1037     struct sock *sk;
1038     struct skb_timeval tstamp;
1039     struct net_device *dev;
1040     - struct net_device *input_dev;
1041     + int iif;
1042     + /* 4 byte hole on 64 bit*/
1043    
1044     union {
1045     struct tcphdr *th;
1046     diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h
1047     index b902d24..02647fe 100644
1048     --- a/include/net/pkt_cls.h
1049     +++ b/include/net/pkt_cls.h
1050     @@ -352,10 +352,13 @@ tcf_change_indev(struct tcf_proto *tp, char *indev, struct rtattr *indev_tlv)
1051     static inline int
1052     tcf_match_indev(struct sk_buff *skb, char *indev)
1053     {
1054     + struct net_device *dev;
1055     +
1056     if (indev[0]) {
1057     - if (!skb->input_dev)
1058     + if (!skb->iif)
1059     return 0;
1060     - if (strcmp(indev, skb->input_dev->name))
1061     + dev = __dev_get_by_index(skb->iif);
1062     + if (!dev || strcmp(indev, dev->name))
1063     return 0;
1064     }
1065    
1066     diff --git a/net/core/dev.c b/net/core/dev.c
1067     index 295f8f9..2a587b8 100644
1068     --- a/net/core/dev.c
1069     +++ b/net/core/dev.c
1070     @@ -1741,8 +1741,8 @@ static int ing_filter(struct sk_buff *skb)
1071     if (dev->qdisc_ingress) {
1072     __u32 ttl = (__u32) G_TC_RTTL(skb->tc_verd);
1073     if (MAX_RED_LOOP < ttl++) {
1074     - printk(KERN_WARNING "Redir loop detected Dropping packet (%s->%s)\n",
1075     - skb->input_dev->name, skb->dev->name);
1076     + printk(KERN_WARNING "Redir loop detected Dropping packet (%d->%d)\n",
1077     + skb->iif, skb->dev->ifindex);
1078     return TC_ACT_SHOT;
1079     }
1080    
1081     @@ -1775,8 +1775,8 @@ int netif_receive_skb(struct sk_buff *skb)
1082     if (!skb->tstamp.off_sec)
1083     net_timestamp(skb);
1084    
1085     - if (!skb->input_dev)
1086     - skb->input_dev = skb->dev;
1087     + if (!skb->iif)
1088     + skb->iif = skb->dev->ifindex;
1089    
1090     orig_dev = skb_bond(skb);
1091    
1092     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1093     index 5299083..ba94969 100644
1094     --- a/net/core/skbuff.c
1095     +++ b/net/core/skbuff.c
1096     @@ -497,7 +497,7 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
1097     n->tc_verd = SET_TC_VERD(skb->tc_verd,0);
1098     n->tc_verd = CLR_TC_OK2MUNGE(n->tc_verd);
1099     n->tc_verd = CLR_TC_MUNGED(n->tc_verd);
1100     - C(input_dev);
1101     + C(iif);
1102     #endif
1103     skb_copy_secmark(n, skb);
1104     #endif
1105     diff --git a/net/ieee80211/softmac/ieee80211softmac_wx.c b/net/ieee80211/softmac/ieee80211softmac_wx.c
1106     index fa2f7da..fb58e03 100644
1107     --- a/net/ieee80211/softmac/ieee80211softmac_wx.c
1108     +++ b/net/ieee80211/softmac/ieee80211softmac_wx.c
1109     @@ -265,6 +265,12 @@ ieee80211softmac_wx_get_rate(struct net_device *net_dev,
1110     int err = -EINVAL;
1111    
1112     spin_lock_irqsave(&mac->lock, flags);
1113     +
1114     + if (unlikely(!mac->running)) {
1115     + err = -ENODEV;
1116     + goto out_unlock;
1117     + }
1118     +
1119     switch (mac->txrates.default_rate) {
1120     case IEEE80211_CCK_RATE_1MB:
1121     data->bitrate.value = 1000000;
1122     diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
1123     index b1c1116..9a37db2 100644
1124     --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
1125     +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
1126     @@ -409,12 +409,10 @@ checkentry(const char *tablename,
1127     "has invalid config pointer!\n");
1128     return 0;
1129     }
1130     - clusterip_config_entry_get(cipinfo->config);
1131     } else {
1132     /* Case B: This is a new rule referring to an existing
1133     * clusterip config. */
1134     cipinfo->config = config;
1135     - clusterip_config_entry_get(cipinfo->config);
1136     }
1137     } else {
1138     /* Case C: This is a completely new clusterip config */
1139     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
1140     index 1951eaa..340bcdd 100644
1141     --- a/net/ipv4/tcp_output.c
1142     +++ b/net/ipv4/tcp_output.c
1143     @@ -943,7 +943,8 @@ static void tcp_cwnd_validate(struct sock *sk, struct tcp_sock *tp)
1144     if (tp->packets_out > tp->snd_cwnd_used)
1145     tp->snd_cwnd_used = tp->packets_out;
1146    
1147     - if ((s32)(tcp_time_stamp - tp->snd_cwnd_stamp) >= inet_csk(sk)->icsk_rto)
1148     + if (sysctl_tcp_slow_start_after_idle &&
1149     + (s32)(tcp_time_stamp - tp->snd_cwnd_stamp) >= inet_csk(sk)->icsk_rto)
1150     tcp_cwnd_application_limited(sk);
1151     }
1152     }
1153     @@ -1607,6 +1608,9 @@ u32 __tcp_select_window(struct sock *sk)
1154     */
1155     if (window <= free_space - mss || window > free_space)
1156     window = (free_space/mss)*mss;
1157     + else if (mss == full_space &&
1158     + free_space > window + full_space/2)
1159     + window = free_space;
1160     }
1161    
1162     return window;
1163     diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
1164     index 4ae1b19..9479fbd 100644
1165     --- a/net/ipv6/raw.c
1166     +++ b/net/ipv6/raw.c
1167     @@ -688,9 +688,9 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
1168     int err;
1169    
1170     /* Rough check on arithmetic overflow,
1171     - better check is made in ip6_build_xmit
1172     + better check is made in ip6_append_data().
1173     */
1174     - if (len < 0)
1175     + if (len > INT_MAX)
1176     return -EMSGSIZE;
1177    
1178     /* Mirror BSD error message compatibility */
1179     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
1180     index f52a5c3..b5dc5db 100644
1181     --- a/net/ipv6/udp.c
1182     +++ b/net/ipv6/udp.c
1183     @@ -616,7 +616,7 @@ do_udp_sendmsg:
1184     return udp_sendmsg(iocb, sk, msg, len);
1185    
1186     /* Rough check on arithmetic overflow,
1187     - better check is made in ip6_build_xmit
1188     + better check is made in ip6_append_data().
1189     */
1190     if (len > INT_MAX - sizeof(struct udphdr))
1191     return -EMSGSIZE;
1192     diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
1193     index 4838972..7263a2e 100644
1194     --- a/net/sched/act_mirred.c
1195     +++ b/net/sched/act_mirred.c
1196     @@ -199,7 +199,7 @@ bad_mirred:
1197     skb2->tc_verd = SET_TC_FROM(skb2->tc_verd, at);
1198    
1199     skb2->dev = dev;
1200     - skb2->input_dev = skb->dev;
1201     + skb2->iif = skb->dev->ifindex;
1202     dev_queue_xmit(skb2);
1203     spin_unlock(&m->tcf_lock);
1204     return m->tcf_action;
1205     diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c
1206     index 5af8a59..49bb504 100644
1207     --- a/net/sched/cls_tcindex.c
1208     +++ b/net/sched/cls_tcindex.c
1209     @@ -245,9 +245,9 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle,
1210     }
1211    
1212     if (tb[TCA_TCINDEX_SHIFT-1]) {
1213     - if (RTA_PAYLOAD(tb[TCA_TCINDEX_SHIFT-1]) < sizeof(u16))
1214     + if (RTA_PAYLOAD(tb[TCA_TCINDEX_SHIFT-1]) < sizeof(int))
1215     goto errout;
1216     - cp.shift = *(u16 *) RTA_DATA(tb[TCA_TCINDEX_SHIFT-1]);
1217     + cp.shift = *(int *) RTA_DATA(tb[TCA_TCINDEX_SHIFT-1]);
1218     }
1219    
1220     err = -EBUSY;
1221     diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
1222     index f0f2c1a..7cd0f3c 100644
1223     --- a/net/xfrm/xfrm_state.c
1224     +++ b/net/xfrm/xfrm_state.c
1225     @@ -1220,7 +1220,8 @@ int xfrm_replay_check(struct xfrm_state *x, __be32 net_seq)
1226     return 0;
1227    
1228     diff = x->replay.seq - seq;
1229     - if (diff >= x->props.replay_window) {
1230     + if (diff >= min_t(unsigned int, x->props.replay_window,
1231     + sizeof(x->replay.bitmap) * 8)) {
1232     x->stats.replay_window++;
1233     return -EINVAL;
1234     }
1235     diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
1236     index 668a11a..6bc7e7c 100644
1237     --- a/scripts/basic/fixdep.c
1238     +++ b/scripts/basic/fixdep.c
1239     @@ -28,9 +28,11 @@
1240     * the dependency on linux/autoconf.h by a dependency on every config
1241     * option which is mentioned in any of the listed prequisites.
1242     *
1243     - * To be exact, split-include populates a tree in include/config/,
1244     - * e.g. include/config/his/driver.h, which contains the #define/#undef
1245     - * for the CONFIG_HIS_DRIVER option.
1246     + * kconfig populates a tree in include/config/ with an empty file
1247     + * for each config symbol and when the configuration is updated
1248     + * the files representing changed config options are touched
1249     + * which then let make pick up the changes and the files that use
1250     + * the config symbols are rebuilt.
1251     *
1252     * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
1253     * which depend on "include/linux/config/his/driver.h" will be rebuilt,
1254     @@ -245,6 +247,8 @@ void parse_config_file(char *map, size_t len)
1255     continue;
1256    
1257     found:
1258     + if (!memcmp(q - 7, "_MODULE", 7))
1259     + q -= 7;
1260     use_config(p+7, q-p-7);
1261     }
1262     }