Magellan Linux

Contents of /trunk/kernel26-magellan/patches-2.6.16-r5/0100-2.6.16-patch-2.6.16.4_fixed

Parent Directory Parent Directory | Revision Log Revision Log


Revision 67 - (show annotations) (download)
Wed Apr 12 18:59:30 2006 UTC (18 years, 1 month ago) by niro
File size: 36373 byte(s)
ver bump to 2.6.16-r5; updated to linux-2.6.16.4

1 diff --git a/arch/i386/kernel/cpu/cpufreq/Kconfig b/arch/i386/kernel/cpu/cpufreq/Kconfig
2 index 26892d2..16f2e35 100644
3 --- a/arch/i386/kernel/cpu/cpufreq/Kconfig
4 +++ b/arch/i386/kernel/cpu/cpufreq/Kconfig
5 @@ -203,6 +203,7 @@ config X86_LONGRUN
6 config X86_LONGHAUL
7 tristate "VIA Cyrix III Longhaul"
8 select CPU_FREQ_TABLE
9 + depends on BROKEN
10 help
11 This adds the CPUFreq driver for VIA Samuel/CyrixIII,
12 VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T
13 diff --git a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
14 index cc73a7a..ebe1848 100644
15 --- a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
16 +++ b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
17 @@ -244,7 +244,7 @@ static int cpufreq_p4_cpu_init(struct cp
18 for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) {
19 if ((i<2) && (has_N44_O17_errata[policy->cpu]))
20 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
21 - else if (has_N60_errata[policy->cpu] && p4clockmod_table[i].frequency < 2000000)
22 + else if (has_N60_errata[policy->cpu] && ((stock_freq * i)/8) < 2000000)
23 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
24 else
25 p4clockmod_table[i].frequency = (stock_freq * i)/8;
26 diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
27 index 28cc5d5..cfc4276 100644
28 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
29 +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
30 @@ -75,7 +75,9 @@ static int speedstep_smi_ownership (void
31 __asm__ __volatile__(
32 "out %%al, (%%dx)\n"
33 : "=D" (result)
34 - : "a" (command), "b" (function), "c" (0), "d" (smi_port), "D" (0), "S" (magic)
35 + : "a" (command), "b" (function), "c" (0), "d" (smi_port),
36 + "D" (0), "S" (magic)
37 + : "memory"
38 );
39
40 dprintk("result is %x\n", result);
41 diff --git a/arch/i386/kernel/dmi_scan.c b/arch/i386/kernel/dmi_scan.c
42 index 6a93d75..ca2a0cb 100644
43 --- a/arch/i386/kernel/dmi_scan.c
44 +++ b/arch/i386/kernel/dmi_scan.c
45 @@ -106,7 +106,7 @@ static void __init dmi_save_devices(stru
46 struct dmi_device *dev;
47
48 for (i = 0; i < count; i++) {
49 - char *d = ((char *) dm) + (i * 2);
50 + char *d = (char *)(dm + 1) + (i * 2);
51
52 /* Skip disabled device */
53 if ((*d & 0x80) == 0)
54 diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c
55 index ba92bab..4c4449b 100644
56 --- a/arch/powerpc/kernel/pci_64.c
57 +++ b/arch/powerpc/kernel/pci_64.c
58 @@ -78,6 +78,7 @@ int global_phb_number; /* Global phb co
59
60 /* Cached ISA bridge dev. */
61 struct pci_dev *ppc64_isabridge_dev = NULL;
62 +EXPORT_SYMBOL_GPL(ppc64_isabridge_dev);
63
64 static void fixup_broken_pcnet32(struct pci_dev* dev)
65 {
66 diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
67 index 07a7f97..29f3d75 100644
68 --- a/drivers/base/cpu.c
69 +++ b/drivers/base/cpu.c
70 @@ -141,7 +141,7 @@ int __devinit register_cpu(struct cpu *c
71 return error;
72 }
73
74 -struct sys_device *get_cpu_sysdev(int cpu)
75 +struct sys_device *get_cpu_sysdev(unsigned cpu)
76 {
77 if (cpu < NR_CPUS)
78 return cpu_sys_devices[cpu];
79 diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
80 index e97e911..4723182 100644
81 --- a/drivers/base/firmware_class.c
82 +++ b/drivers/base/firmware_class.c
83 @@ -211,18 +211,20 @@ static int
84 fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
85 {
86 u8 *new_data;
87 + int new_size = fw_priv->alloc_size;
88
89 if (min_size <= fw_priv->alloc_size)
90 return 0;
91
92 - new_data = vmalloc(fw_priv->alloc_size + PAGE_SIZE);
93 + new_size = ALIGN(min_size, PAGE_SIZE);
94 + new_data = vmalloc(new_size);
95 if (!new_data) {
96 printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
97 /* Make sure that we don't keep incomplete data */
98 fw_load_abort(fw_priv);
99 return -ENOMEM;
100 }
101 - fw_priv->alloc_size += PAGE_SIZE;
102 + fw_priv->alloc_size = new_size;
103 if (fw_priv->fw->data) {
104 memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
105 vfree(fw_priv->fw->data);
106 diff --git a/drivers/base/node.c b/drivers/base/node.c
107 index 16c513a..c80c3ae 100644
108 --- a/drivers/base/node.c
109 +++ b/drivers/base/node.c
110 @@ -106,7 +106,7 @@ static ssize_t node_read_numastat(struct
111 other_node = 0;
112 for (i = 0; i < MAX_NR_ZONES; i++) {
113 struct zone *z = &pg->node_zones[i];
114 - for (cpu = 0; cpu < NR_CPUS; cpu++) {
115 + for_each_online_cpu(cpu) {
116 struct per_cpu_pageset *ps = zone_pcp(z,cpu);
117 numa_hit += ps->numa_hit;
118 numa_miss += ps->numa_miss;
119 diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
120 index 0d65394..c149d57 100644
121 --- a/drivers/block/cciss.c
122 +++ b/drivers/block/cciss.c
123 @@ -3269,8 +3269,8 @@ clean2:
124 unregister_blkdev(hba[i]->major, hba[i]->devname);
125 clean1:
126 release_io_mem(hba[i]);
127 - free_hba(i);
128 hba[i]->busy_initializing = 0;
129 + free_hba(i);
130 return(-1);
131 }
132
133 diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
134 index 05ba410..8b72a61 100644
135 --- a/drivers/char/Kconfig
136 +++ b/drivers/char/Kconfig
137 @@ -187,6 +187,7 @@ config MOXA_SMARTIO
138 config ISI
139 tristate "Multi-Tech multiport card support (EXPERIMENTAL)"
140 depends on SERIAL_NONSTANDARD
141 + select FW_LOADER
142 help
143 This is a driver for the Multi-Tech cards which provide several
144 serial ports. The driver is experimental and can currently only be
145 diff --git a/drivers/char/tlclk.c b/drivers/char/tlclk.c
146 index 4c27218..2546637 100644
147 --- a/drivers/char/tlclk.c
148 +++ b/drivers/char/tlclk.c
149 @@ -767,6 +767,7 @@ static int __init tlclk_init(void)
150 printk(KERN_ERR "tlclk: can't get major %d.\n", tlclk_major);
151 return ret;
152 }
153 + tlclk_major = ret;
154 alarm_events = kzalloc( sizeof(struct tlclk_alarms), GFP_KERNEL);
155 if (!alarm_events)
156 goto out1;
157 diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
158 index eca92eb..d83248e 100644
159 --- a/drivers/ieee1394/sbp2.c
160 +++ b/drivers/ieee1394/sbp2.c
161 @@ -495,22 +495,17 @@ static struct sbp2_command_info *sbp2uti
162 /*
163 * This function finds the sbp2_command for a given outstanding SCpnt.
164 * Only looks at the inuse list.
165 + * Must be called with scsi_id->sbp2_command_orb_lock held.
166 */
167 -static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(struct scsi_id_instance_data *scsi_id, void *SCpnt)
168 +static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(
169 + struct scsi_id_instance_data *scsi_id, void *SCpnt)
170 {
171 struct sbp2_command_info *command;
172 - unsigned long flags;
173
174 - spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
175 - if (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
176 - list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list) {
177 - if (command->Current_SCpnt == SCpnt) {
178 - spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
179 + if (!list_empty(&scsi_id->sbp2_command_orb_inuse))
180 + list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list)
181 + if (command->Current_SCpnt == SCpnt)
182 return command;
183 - }
184 - }
185 - }
186 - spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
187 return NULL;
188 }
189
190 @@ -579,17 +574,15 @@ static void sbp2util_free_command_dma(st
191
192 /*
193 * This function moves a command to the completed orb list.
194 + * Must be called with scsi_id->sbp2_command_orb_lock held.
195 */
196 -static void sbp2util_mark_command_completed(struct scsi_id_instance_data *scsi_id,
197 - struct sbp2_command_info *command)
198 +static void sbp2util_mark_command_completed(
199 + struct scsi_id_instance_data *scsi_id,
200 + struct sbp2_command_info *command)
201 {
202 - unsigned long flags;
203 -
204 - spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
205 list_del(&command->list);
206 sbp2util_free_command_dma(command);
207 list_add_tail(&command->list, &scsi_id->sbp2_command_orb_completed);
208 - spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
209 }
210
211 /*
212 @@ -2177,7 +2170,9 @@ static int sbp2_handle_status_write(stru
213 * Matched status with command, now grab scsi command pointers and check status
214 */
215 SCpnt = command->Current_SCpnt;
216 + spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
217 sbp2util_mark_command_completed(scsi_id, command);
218 + spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
219
220 if (SCpnt) {
221
222 @@ -2513,6 +2508,7 @@ static int sbp2scsi_abort(struct scsi_cm
223 (struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
224 struct sbp2scsi_host_info *hi = scsi_id->hi;
225 struct sbp2_command_info *command;
226 + unsigned long flags;
227
228 SBP2_ERR("aborting sbp2 command");
229 scsi_print_command(SCpnt);
230 @@ -2523,6 +2519,7 @@ static int sbp2scsi_abort(struct scsi_cm
231 * Right now, just return any matching command structures
232 * to the free pool.
233 */
234 + spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
235 command = sbp2util_find_command_for_SCpnt(scsi_id, SCpnt);
236 if (command) {
237 SBP2_DEBUG("Found command to abort");
238 @@ -2540,6 +2537,7 @@ static int sbp2scsi_abort(struct scsi_cm
239 command->Current_done(command->Current_SCpnt);
240 }
241 }
242 + spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
243
244 /*
245 * Initiate a fetch agent reset.
246 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
247 index 745ca1f..d559569 100644
248 --- a/drivers/md/dm.c
249 +++ b/drivers/md/dm.c
250 @@ -533,30 +533,35 @@ static void __clone_and_map(struct clone
251
252 } else {
253 /*
254 - * Create two copy bios to deal with io that has
255 - * been split across a target.
256 + * Handle a bvec that must be split between two or more targets.
257 */
258 struct bio_vec *bv = bio->bi_io_vec + ci->idx;
259 + sector_t remaining = to_sector(bv->bv_len);
260 + unsigned int offset = 0;
261
262 - clone = split_bvec(bio, ci->sector, ci->idx,
263 - bv->bv_offset, max);
264 - __map_bio(ti, clone, tio);
265 -
266 - ci->sector += max;
267 - ci->sector_count -= max;
268 - ti = dm_table_find_target(ci->map, ci->sector);
269 -
270 - len = to_sector(bv->bv_len) - max;
271 - clone = split_bvec(bio, ci->sector, ci->idx,
272 - bv->bv_offset + to_bytes(max), len);
273 - tio = alloc_tio(ci->md);
274 - tio->io = ci->io;
275 - tio->ti = ti;
276 - memset(&tio->info, 0, sizeof(tio->info));
277 - __map_bio(ti, clone, tio);
278 + do {
279 + if (offset) {
280 + ti = dm_table_find_target(ci->map, ci->sector);
281 + max = max_io_len(ci->md, ci->sector, ti);
282 +
283 + tio = alloc_tio(ci->md);
284 + tio->io = ci->io;
285 + tio->ti = ti;
286 + memset(&tio->info, 0, sizeof(tio->info));
287 + }
288 +
289 + len = min(remaining, max);
290 +
291 + clone = split_bvec(bio, ci->sector, ci->idx,
292 + bv->bv_offset + offset, len);
293 +
294 + __map_bio(ti, clone, tio);
295 +
296 + ci->sector += len;
297 + ci->sector_count -= len;
298 + offset += to_bytes(len);
299 + } while (remaining -= len);
300
301 - ci->sector += len;
302 - ci->sector_count -= len;
303 ci->idx++;
304 }
305 }
306 diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
307 index d82c8a3..ef42a26 100644
308 --- a/drivers/media/video/Kconfig
309 +++ b/drivers/media/video/Kconfig
310 @@ -349,6 +349,7 @@ config VIDEO_AUDIO_DECODER
311 config VIDEO_DECODER
312 tristate "Add support for additional video chipsets"
313 depends on VIDEO_DEV && I2C && EXPERIMENTAL
314 + select FW_LOADER
315 ---help---
316 Say Y here to compile drivers for SAA7115, SAA7127 and CX25840
317 video decoders.
318 diff --git a/drivers/media/video/tuner-types.c b/drivers/media/video/tuner-types.c
319 index 6fe7817..5f3d46d 100644
320 --- a/drivers/media/video/tuner-types.c
321 +++ b/drivers/media/video/tuner-types.c
322 @@ -1087,8 +1087,8 @@ static struct tuner_params tuner_tnf_533
323 /* ------------ TUNER_SAMSUNG_TCPN_2121P30A - Samsung NTSC ------------ */
324
325 static struct tuner_range tuner_samsung_tcpn_2121p30a_ntsc_ranges[] = {
326 - { 16 * 175.75 /*MHz*/, 0x01, },
327 - { 16 * 410.25 /*MHz*/, 0x02, },
328 + { 16 * 130.00 /*MHz*/, 0x01, },
329 + { 16 * 364.50 /*MHz*/, 0x02, },
330 { 16 * 999.99 , 0x08, },
331 };
332
333 diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
334 index 8936058..6e2ec56 100644
335 --- a/drivers/net/irda/irda-usb.c
336 +++ b/drivers/net/irda/irda-usb.c
337 @@ -740,7 +740,7 @@ static void irda_usb_receive(struct urb
338 struct sk_buff *newskb;
339 struct sk_buff *dataskb;
340 struct urb *next_urb;
341 - int docopy;
342 + unsigned int len, docopy;
343
344 IRDA_DEBUG(2, "%s(), len=%d\n", __FUNCTION__, urb->actual_length);
345
346 @@ -851,10 +851,11 @@ static void irda_usb_receive(struct urb
347 dataskb->dev = self->netdev;
348 dataskb->mac.raw = dataskb->data;
349 dataskb->protocol = htons(ETH_P_IRDA);
350 + len = dataskb->len;
351 netif_rx(dataskb);
352
353 /* Keep stats up to date */
354 - self->stats.rx_bytes += dataskb->len;
355 + self->stats.rx_bytes += len;
356 self->stats.rx_packets++;
357 self->netdev->last_rx = jiffies;
358
359 diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
360 index ef85d76..8101657 100644
361 --- a/drivers/net/wireless/Kconfig
362 +++ b/drivers/net/wireless/Kconfig
363 @@ -239,7 +239,8 @@ config IPW2200_DEBUG
364
365 config AIRO
366 tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
367 - depends on NET_RADIO && ISA_DMA_API && CRYPTO && (PCI || BROKEN)
368 + depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN)
369 + select CRYPTO
370 ---help---
371 This is the standard Linux driver to support Cisco/Aironet ISA and
372 PCI 802.11 wireless cards.
373 @@ -374,6 +375,7 @@ config PCMCIA_HERMES
374 config PCMCIA_SPECTRUM
375 tristate "Symbol Spectrum24 Trilogy PCMCIA card support"
376 depends on NET_RADIO && PCMCIA && HERMES
377 + select FW_LOADER
378 ---help---
379
380 This is a driver for 802.11b cards using RAM-loadable Symbol
381 @@ -387,6 +389,7 @@ config PCMCIA_SPECTRUM
382 config AIRO_CS
383 tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
384 depends on NET_RADIO && PCMCIA && (BROKEN || !M32R)
385 + select CRYPTO
386 ---help---
387 This is the standard Linux driver to support Cisco/Aironet PCMCIA
388 802.11 wireless cards. This driver is the same as the Aironet
389 diff --git a/drivers/net/wireless/hostap/hostap_80211_tx.c b/drivers/net/wireless/hostap/hostap_80211_tx.c
390 index 4a85e63..5f398bd 100644
391 --- a/drivers/net/wireless/hostap/hostap_80211_tx.c
392 +++ b/drivers/net/wireless/hostap/hostap_80211_tx.c
393 @@ -469,7 +469,7 @@ int hostap_master_start_xmit(struct sk_b
394 }
395
396 if (local->ieee_802_1x && meta->ethertype == ETH_P_PAE && tx.crypt &&
397 - !(fc & IEEE80211_FCTL_VERS)) {
398 + !(fc & IEEE80211_FCTL_PROTECTED)) {
399 no_encrypt = 1;
400 PDEBUG(DEBUG_EXTRA2, "%s: TX: IEEE 802.1X - passing "
401 "unencrypted EAPOL frame\n", dev->name);
402 diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
403 index 287676a..aa6f3a4 100644
404 --- a/drivers/net/wireless/ipw2200.c
405 +++ b/drivers/net/wireless/ipw2200.c
406 @@ -9956,9 +9956,8 @@ static int ipw_ethtool_set_eeprom(struct
407 return -EINVAL;
408 down(&p->sem);
409 memcpy(&p->eeprom[eeprom->offset], bytes, eeprom->len);
410 - for (i = IPW_EEPROM_DATA;
411 - i < IPW_EEPROM_DATA + IPW_EEPROM_IMAGE_SIZE; i++)
412 - ipw_write8(p, i, p->eeprom[i]);
413 + for (i = 0; i < IPW_EEPROM_IMAGE_SIZE; i++)
414 + ipw_write8(p, i + IPW_EEPROM_DATA, p->eeprom[i]);
415 up(&p->sem);
416 return 0;
417 }
418 diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
419 index bb96ce1..a4333a8 100644
420 --- a/drivers/pcmcia/ds.c
421 +++ b/drivers/pcmcia/ds.c
422 @@ -546,7 +546,7 @@ static int pcmcia_device_query(struct pc
423 tmp = vers1->str + vers1->ofs[i];
424
425 length = strlen(tmp) + 1;
426 - if ((length < 3) || (length > 255))
427 + if ((length < 2) || (length > 255))
428 continue;
429
430 p_dev->prod_id[i] = kmalloc(sizeof(char) * length,
431 diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c
432 index 2770005..b00af08 100644
433 --- a/drivers/scsi/sata_mv.c
434 +++ b/drivers/scsi/sata_mv.c
435 @@ -1102,6 +1102,7 @@ static u8 mv_get_crpb_status(struct ata_
436 void __iomem *port_mmio = mv_ap_base(ap);
437 struct mv_port_priv *pp = ap->private_data;
438 u32 out_ptr;
439 + u8 ata_status;
440
441 out_ptr = readl(port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
442
443 @@ -1109,6 +1110,8 @@ static u8 mv_get_crpb_status(struct ata_
444 assert(((out_ptr >> EDMA_RSP_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK) ==
445 pp->rsp_consumer);
446
447 + ata_status = pp->crpb[pp->rsp_consumer].flags >> CRPB_FLAG_STATUS_SHIFT;
448 +
449 /* increment our consumer index... */
450 pp->rsp_consumer = mv_inc_q_index(&pp->rsp_consumer);
451
452 @@ -1123,7 +1126,7 @@ static u8 mv_get_crpb_status(struct ata_
453 writelfl(out_ptr, port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
454
455 /* Return ATA status register for completed CRPB */
456 - return (pp->crpb[pp->rsp_consumer].flags >> CRPB_FLAG_STATUS_SHIFT);
457 + return ata_status;
458 }
459
460 /**
461 @@ -1192,7 +1195,6 @@ static void mv_host_intr(struct ata_host
462 u32 hc_irq_cause;
463 int shift, port, port0, hard_port, handled;
464 unsigned int err_mask;
465 - u8 ata_status = 0;
466
467 if (hc == 0) {
468 port0 = 0;
469 @@ -1210,6 +1212,7 @@ static void mv_host_intr(struct ata_host
470 hc,relevant,hc_irq_cause);
471
472 for (port = port0; port < port0 + MV_PORTS_PER_HC; port++) {
473 + u8 ata_status = 0;
474 ap = host_set->ports[port];
475 hard_port = port & MV_PORT_MASK; /* range 0-3 */
476 handled = 0; /* ensure ata_status is set if handled++ */
477 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
478 index 7135e54..96cabeb 100644
479 --- a/drivers/usb/core/message.c
480 +++ b/drivers/usb/core/message.c
481 @@ -1388,11 +1388,13 @@ free_interfaces:
482 if (dev->state != USB_STATE_ADDRESS)
483 usb_disable_device (dev, 1); // Skip ep0
484
485 - i = dev->bus_mA - cp->desc.bMaxPower * 2;
486 - if (i < 0)
487 - dev_warn(&dev->dev, "new config #%d exceeds power "
488 - "limit by %dmA\n",
489 - configuration, -i);
490 + if (cp) {
491 + i = dev->bus_mA - cp->desc.bMaxPower * 2;
492 + if (i < 0)
493 + dev_warn(&dev->dev, "new config #%d exceeds power "
494 + "limit by %dmA\n",
495 + configuration, -i);
496 + }
497
498 if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
499 USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
500 diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
501 index ebcca97..88419c6 100644
502 --- a/drivers/usb/host/ehci-sched.c
503 +++ b/drivers/usb/host/ehci-sched.c
504 @@ -707,6 +707,7 @@ iso_stream_init (
505 } else {
506 u32 addr;
507 int think_time;
508 + int hs_transfers;
509
510 addr = dev->ttport << 24;
511 if (!ehci_is_TDI(ehci)
512 @@ -719,6 +720,7 @@ iso_stream_init (
513 think_time = dev->tt ? dev->tt->think_time : 0;
514 stream->tt_usecs = NS_TO_US (think_time + usb_calc_bus_time (
515 dev->speed, is_input, 1, maxp));
516 + hs_transfers = max (1u, (maxp + 187) / 188);
517 if (is_input) {
518 u32 tmp;
519
520 @@ -727,12 +729,11 @@ iso_stream_init (
521 stream->usecs = HS_USECS_ISO (1);
522 stream->raw_mask = 1;
523
524 - /* pessimistic c-mask */
525 - tmp = usb_calc_bus_time (USB_SPEED_FULL, 1, 0, maxp)
526 - / (125 * 1000);
527 - stream->raw_mask |= 3 << (tmp + 9);
528 + /* c-mask as specified in USB 2.0 11.18.4 3.c */
529 + tmp = (1 << (hs_transfers + 2)) - 1;
530 + stream->raw_mask |= tmp << (8 + 2);
531 } else
532 - stream->raw_mask = smask_out [maxp / 188];
533 + stream->raw_mask = smask_out [hs_transfers - 1];
534 bandwidth = stream->usecs + stream->c_usecs;
535 bandwidth /= 1 << (interval + 2);
536
537 diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c
538 index 910e233..8ba6152 100644
539 --- a/drivers/video/cfbimgblt.c
540 +++ b/drivers/video/cfbimgblt.c
541 @@ -169,7 +169,7 @@ static inline void slow_imageblit(const
542
543 while (j--) {
544 l--;
545 - color = (*s & 1 << (FB_BIT_NR(l))) ? fgcolor : bgcolor;
546 + color = (*s & (1 << l)) ? fgcolor : bgcolor;
547 val |= FB_SHIFT_HIGH(color, shift);
548
549 /* Did the bitshift spill bits to the next long? */
550 diff --git a/drivers/video/i810/i810_main.c b/drivers/video/i810/i810_main.c
551 index d8467c0..788297e 100644
552 --- a/drivers/video/i810/i810_main.c
553 +++ b/drivers/video/i810/i810_main.c
554 @@ -1508,7 +1508,7 @@ static int i810fb_cursor(struct fb_info
555 int size = ((cursor->image.width + 7) >> 3) *
556 cursor->image.height;
557 int i;
558 - u8 *data = kmalloc(64 * 8, GFP_KERNEL);
559 + u8 *data = kmalloc(64 * 8, GFP_ATOMIC);
560
561 if (data == NULL)
562 return -ENOMEM;
563 diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
564 index 3ad8455..651a9e1 100644
565 --- a/fs/9p/vfs_inode.c
566 +++ b/fs/9p/vfs_inode.c
567 @@ -614,6 +614,7 @@ static struct dentry *v9fs_vfs_lookup(st
568
569 sb = dir->i_sb;
570 v9ses = v9fs_inode2v9ses(dir);
571 + dentry->d_op = &v9fs_dentry_operations;
572 dirfid = v9fs_fid_lookup(dentry->d_parent);
573
574 if (!dirfid) {
575 @@ -681,8 +682,6 @@ static struct dentry *v9fs_vfs_lookup(st
576 goto FreeFcall;
577
578 fid->qid = fcall->params.rstat.stat.qid;
579 -
580 - dentry->d_op = &v9fs_dentry_operations;
581 v9fs_stat2inode(&fcall->params.rstat.stat, inode, inode->i_sb);
582
583 d_add(dentry, inode);
584 diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c
585 index 6d2dfed..f61142a 100644
586 --- a/fs/nfsd/nfs3proc.c
587 +++ b/fs/nfsd/nfs3proc.c
588 @@ -682,7 +682,7 @@ static struct svc_procedure nfsd_proced
589 PROC(lookup, dirop, dirop, fhandle2, RC_NOCACHE, ST+FH+pAT+pAT),
590 PROC(access, access, access, fhandle, RC_NOCACHE, ST+pAT+1),
591 PROC(readlink, readlink, readlink, fhandle, RC_NOCACHE, ST+pAT+1+NFS3_MAXPATHLEN/4),
592 - PROC(read, read, read, fhandle, RC_NOCACHE, ST+pAT+4+NFSSVC_MAXBLKSIZE),
593 + PROC(read, read, read, fhandle, RC_NOCACHE, ST+pAT+4+NFSSVC_MAXBLKSIZE/4),
594 PROC(write, write, write, fhandle, RC_REPLBUFF, ST+WC+4),
595 PROC(create, create, create, fhandle2, RC_REPLBUFF, ST+(1+FH+pAT)+WC),
596 PROC(mkdir, mkdir, create, fhandle2, RC_REPLBUFF, ST+(1+FH+pAT)+WC),
597 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
598 index 6d63f1d..ca8a4c4 100644
599 --- a/fs/nfsd/nfs4proc.c
600 +++ b/fs/nfsd/nfs4proc.c
601 @@ -975,7 +975,7 @@ struct nfsd4_voidargs { int dummy; };
602 */
603 static struct svc_procedure nfsd_procedures4[2] = {
604 PROC(null, void, void, void, RC_NOCACHE, 1),
605 - PROC(compound, compound, compound, compound, RC_NOCACHE, NFSD_BUFSIZE)
606 + PROC(compound, compound, compound, compound, RC_NOCACHE, NFSD_BUFSIZE/4)
607 };
608
609 struct svc_version nfsd_version4 = {
610 diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
611 index 3e6b75c..06cd0db 100644
612 --- a/fs/nfsd/nfsproc.c
613 +++ b/fs/nfsd/nfsproc.c
614 @@ -553,7 +553,7 @@ static struct svc_procedure nfsd_proced
615 PROC(none, void, void, none, RC_NOCACHE, ST),
616 PROC(lookup, diropargs, diropres, fhandle, RC_NOCACHE, ST+FH+AT),
617 PROC(readlink, readlinkargs, readlinkres, none, RC_NOCACHE, ST+1+NFS_MAXPATHLEN/4),
618 - PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE),
619 + PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE/4),
620 PROC(none, void, void, none, RC_NOCACHE, ST),
621 PROC(write, writeargs, attrstat, fhandle, RC_REPLBUFF, ST+AT),
622 PROC(create, createargs, diropres, fhandle, RC_REPLBUFF, ST+FH+AT),
623 diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c
624 index 1d24fea..826c131 100644
625 --- a/fs/proc/proc_misc.c
626 +++ b/fs/proc/proc_misc.c
627 @@ -312,7 +312,7 @@ static void *devinfo_next(struct seq_fil
628 case BLK_HDR:
629 info->state = BLK_LIST;
630 (*pos)++;
631 - break;
632 + /*fallthrough*/
633 case BLK_LIST:
634 if (get_blkdev_info(info->blkdev,&idummy,&ndummy)) {
635 /*
636 diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
637 index 4063fb3..164a7d0 100644
638 --- a/fs/proc/vmcore.c
639 +++ b/fs/proc/vmcore.c
640 @@ -103,8 +103,8 @@ static ssize_t read_vmcore(struct file *
641 size_t buflen, loff_t *fpos)
642 {
643 ssize_t acc = 0, tmp;
644 - size_t tsz, nr_bytes;
645 - u64 start;
646 + size_t tsz;
647 + u64 start, nr_bytes;
648 struct vmcore *curr_m = NULL;
649
650 if (buflen == 0 || *fpos >= vmcore_size)
651 diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
652 index 49bd219..cfd290d 100644
653 --- a/fs/sysfs/dir.c
654 +++ b/fs/sysfs/dir.c
655 @@ -302,6 +302,7 @@ void sysfs_remove_dir(struct kobject * k
656 * Drop reference from dget() on entrance.
657 */
658 dput(dentry);
659 + kobj->dentry = NULL;
660 }
661
662 int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
663 diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
664 index d0e3d84..2ecc58c 100644
665 --- a/fs/sysfs/file.c
666 +++ b/fs/sysfs/file.c
667 @@ -183,7 +183,7 @@ fill_write_buffer(struct sysfs_buffer *
668 return -ENOMEM;
669
670 if (count >= PAGE_SIZE)
671 - count = PAGE_SIZE;
672 + count = PAGE_SIZE - 1;
673 error = copy_from_user(buffer->page,buf,count);
674 buffer->needs_read_fill = 1;
675 return error ? -EFAULT : count;
676 diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c
677 index 689f7bc..6beee6f 100644
678 --- a/fs/sysfs/inode.c
679 +++ b/fs/sysfs/inode.c
680 @@ -227,12 +227,16 @@ void sysfs_drop_dentry(struct sysfs_dire
681 void sysfs_hash_and_remove(struct dentry * dir, const char * name)
682 {
683 struct sysfs_dirent * sd;
684 - struct sysfs_dirent * parent_sd = dir->d_fsdata;
685 + struct sysfs_dirent * parent_sd;
686 +
687 + if (!dir)
688 + return;
689
690 if (dir->d_inode == NULL)
691 /* no inode means this hasn't been made visible yet */
692 return;
693
694 + parent_sd = dir->d_fsdata;
695 mutex_lock(&dir->d_inode->i_mutex);
696 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
697 if (!sd->s_element)
698 diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
699 index e38d633..e5ce6e7 100644
700 --- a/fs/sysfs/symlink.c
701 +++ b/fs/sysfs/symlink.c
702 @@ -66,6 +66,7 @@ static int sysfs_add_link(struct dentry
703 if (!error)
704 return 0;
705
706 + kobject_put(target);
707 kfree(sl->link_name);
708 exit2:
709 kfree(sl);
710 diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c
711 index 74d8be8..a980736 100644
712 --- a/fs/xfs/linux-2.6/xfs_aops.c
713 +++ b/fs/xfs/linux-2.6/xfs_aops.c
714 @@ -616,7 +616,7 @@ xfs_is_delayed_page(
715 acceptable = (type == IOMAP_UNWRITTEN);
716 else if (buffer_delay(bh))
717 acceptable = (type == IOMAP_DELAY);
718 - else if (buffer_mapped(bh))
719 + else if (buffer_dirty(bh) && buffer_mapped(bh))
720 acceptable = (type == 0);
721 else
722 break;
723 diff --git a/include/asm-powerpc/floppy.h b/include/asm-powerpc/floppy.h
724 index e258778..608164c 100644
725 --- a/include/asm-powerpc/floppy.h
726 +++ b/include/asm-powerpc/floppy.h
727 @@ -35,6 +35,7 @@
728 #ifdef CONFIG_PCI
729
730 #include <linux/pci.h>
731 +#include <asm/ppc-pci.h> /* for ppc64_isabridge_dev */
732
733 #define fd_dma_setup(addr,size,mode,io) powerpc_fd_dma_setup(addr,size,mode,io)
734
735 @@ -52,12 +53,12 @@ static __inline__ int powerpc_fd_dma_set
736 if (bus_addr
737 && (addr != prev_addr || size != prev_size || dir != prev_dir)) {
738 /* different from last time -- unmap prev */
739 - pci_unmap_single(NULL, bus_addr, prev_size, prev_dir);
740 + pci_unmap_single(ppc64_isabridge_dev, bus_addr, prev_size, prev_dir);
741 bus_addr = 0;
742 }
743
744 if (!bus_addr) /* need to map it */
745 - bus_addr = pci_map_single(NULL, addr, size, dir);
746 + bus_addr = pci_map_single(ppc64_isabridge_dev, addr, size, dir);
747
748 /* remember this one as prev */
749 prev_addr = addr;
750 diff --git a/include/linux/cpu.h b/include/linux/cpu.h
751 index 0ed1d48..d612b89 100644
752 --- a/include/linux/cpu.h
753 +++ b/include/linux/cpu.h
754 @@ -32,7 +32,7 @@ struct cpu {
755 };
756
757 extern int register_cpu(struct cpu *, int, struct node *);
758 -extern struct sys_device *get_cpu_sysdev(int cpu);
759 +extern struct sys_device *get_cpu_sysdev(unsigned cpu);
760 #ifdef CONFIG_HOTPLUG_CPU
761 extern void unregister_cpu(struct cpu *, struct node *);
762 #endif
763 diff --git a/include/linux/fb.h b/include/linux/fb.h
764 index 2cb19e6..2fdd8ae 100644
765 --- a/include/linux/fb.h
766 +++ b/include/linux/fb.h
767 @@ -839,12 +839,10 @@ struct fb_info {
768 #define FB_LEFT_POS(bpp) (32 - bpp)
769 #define FB_SHIFT_HIGH(val, bits) ((val) >> (bits))
770 #define FB_SHIFT_LOW(val, bits) ((val) << (bits))
771 -#define FB_BIT_NR(b) (7 - (b))
772 #else
773 #define FB_LEFT_POS(bpp) (0)
774 #define FB_SHIFT_HIGH(val, bits) ((val) << (bits))
775 #define FB_SHIFT_LOW(val, bits) ((val) >> (bits))
776 -#define FB_BIT_NR(b) (b)
777 #endif
778
779 /*
780 diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
781 index aa6322d..6c1e347 100644
782 --- a/include/linux/proc_fs.h
783 +++ b/include/linux/proc_fs.h
784 @@ -78,7 +78,7 @@ struct kcore_list {
785 struct vmcore {
786 struct list_head list;
787 unsigned long long paddr;
788 - unsigned long size;
789 + unsigned long long size;
790 loff_t offset;
791 };
792
793 diff --git a/include/linux/raid/raid1.h b/include/linux/raid/raid1.h
794 index 9d5494a..3009c81 100644
795 --- a/include/linux/raid/raid1.h
796 +++ b/include/linux/raid/raid1.h
797 @@ -130,6 +130,6 @@ struct r1bio_s {
798 * with failure when last write completes (and all failed).
799 * Record that bi_end_io was called with this flag...
800 */
801 -#define R1BIO_Returned 4
802 +#define R1BIO_Returned 6
803
804 #endif
805 diff --git a/include/linux/rtc.h b/include/linux/rtc.h
806 index 0b2ba67..b739ac1 100644
807 --- a/include/linux/rtc.h
808 +++ b/include/linux/rtc.h
809 @@ -11,8 +11,6 @@
810 #ifndef _LINUX_RTC_H_
811 #define _LINUX_RTC_H_
812
813 -#include <linux/interrupt.h>
814 -
815 /*
816 * The struct used to pass data via the following ioctl. Similar to the
817 * struct tm in <time.h>, but it needs to be here so that the kernel
818 @@ -95,6 +93,8 @@ struct rtc_pll_info {
819
820 #ifdef __KERNEL__
821
822 +#include <linux/interrupt.h>
823 +
824 typedef struct rtc_task {
825 void (*func)(void *private_data);
826 void *private_data;
827 diff --git a/kernel/exec_domain.c b/kernel/exec_domain.c
828 index 867d6db..c01cead 100644
829 --- a/kernel/exec_domain.c
830 +++ b/kernel/exec_domain.c
831 @@ -140,6 +140,7 @@ __set_personality(u_long personality)
832 ep = lookup_exec_domain(personality);
833 if (ep == current_thread_info()->exec_domain) {
834 current->personality = personality;
835 + module_put(ep->module);
836 return 0;
837 }
838
839 diff --git a/kernel/fork.c b/kernel/fork.c
840 index b373322..9d4e0d8 100644
841 --- a/kernel/fork.c
842 +++ b/kernel/fork.c
843 @@ -720,7 +720,7 @@ out_release:
844 free_fdset (new_fdt->open_fds, new_fdt->max_fdset);
845 free_fd_array(new_fdt->fd, new_fdt->max_fds);
846 kmem_cache_free(files_cachep, newf);
847 - goto out;
848 + return NULL;
849 }
850
851 static int copy_files(unsigned long clone_flags, struct task_struct * tsk)
852 diff --git a/kernel/sched.c b/kernel/sched.c
853 index 4d46e90..4e7efac 100644
854 --- a/kernel/sched.c
855 +++ b/kernel/sched.c
856 @@ -237,6 +237,7 @@ struct runqueue {
857
858 task_t *migration_thread;
859 struct list_head migration_queue;
860 + int cpu;
861 #endif
862
863 #ifdef CONFIG_SCHEDSTATS
864 @@ -1660,6 +1661,9 @@ unsigned long nr_iowait(void)
865 /*
866 * double_rq_lock - safely lock two runqueues
867 *
868 + * We must take them in cpu order to match code in
869 + * dependent_sleeper and wake_dependent_sleeper.
870 + *
871 * Note this does not disable interrupts like task_rq_lock,
872 * you need to do so manually before calling.
873 */
874 @@ -1671,7 +1675,7 @@ static void double_rq_lock(runqueue_t *r
875 spin_lock(&rq1->lock);
876 __acquire(rq2->lock); /* Fake it out ;) */
877 } else {
878 - if (rq1 < rq2) {
879 + if (rq1->cpu < rq2->cpu) {
880 spin_lock(&rq1->lock);
881 spin_lock(&rq2->lock);
882 } else {
883 @@ -1707,7 +1711,7 @@ static void double_lock_balance(runqueue
884 __acquires(this_rq->lock)
885 {
886 if (unlikely(!spin_trylock(&busiest->lock))) {
887 - if (busiest < this_rq) {
888 + if (busiest->cpu < this_rq->cpu) {
889 spin_unlock(&this_rq->lock);
890 spin_lock(&busiest->lock);
891 spin_lock(&this_rq->lock);
892 @@ -6035,6 +6039,7 @@ void __init sched_init(void)
893 rq->push_cpu = 0;
894 rq->migration_thread = NULL;
895 INIT_LIST_HEAD(&rq->migration_queue);
896 + rq->cpu = i;
897 #endif
898 atomic_set(&rq->nr_iowait, 0);
899
900 diff --git a/kernel/signal.c b/kernel/signal.c
901 index ea15410..bc8f80b 100644
902 --- a/kernel/signal.c
903 +++ b/kernel/signal.c
904 @@ -975,7 +975,6 @@ __group_complete_signal(int sig, struct
905 if (t == NULL)
906 /* restart balancing at this thread */
907 t = p->signal->curr_target = p;
908 - BUG_ON(t->tgid != p->tgid);
909
910 while (!wants_signal(sig, t)) {
911 t = next_thread(t);
912 diff --git a/net/core/sock.c b/net/core/sock.c
913 index 6e00811..5621198 100644
914 --- a/net/core/sock.c
915 +++ b/net/core/sock.c
916 @@ -404,8 +404,9 @@ set_rcvbuf:
917 if (!valbool) {
918 sk->sk_bound_dev_if = 0;
919 } else {
920 - if (optlen > IFNAMSIZ)
921 - optlen = IFNAMSIZ;
922 + if (optlen > IFNAMSIZ - 1)
923 + optlen = IFNAMSIZ - 1;
924 + memset(devname, 0, sizeof(devname));
925 if (copy_from_user(devname, optval, optlen)) {
926 ret = -EFAULT;
927 break;
928 diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
929 index e320b32..24009be 100644
930 --- a/net/ipv4/fib_trie.c
931 +++ b/net/ipv4/fib_trie.c
932 @@ -314,11 +314,6 @@ static void __leaf_free_rcu(struct rcu_h
933 kfree(container_of(head, struct leaf, rcu));
934 }
935
936 -static inline void free_leaf(struct leaf *leaf)
937 -{
938 - call_rcu(&leaf->rcu, __leaf_free_rcu);
939 -}
940 -
941 static void __leaf_info_free_rcu(struct rcu_head *head)
942 {
943 kfree(container_of(head, struct leaf_info, rcu));
944 @@ -357,7 +352,12 @@ static void __tnode_free_rcu(struct rcu_
945
946 static inline void tnode_free(struct tnode *tn)
947 {
948 - call_rcu(&tn->rcu, __tnode_free_rcu);
949 + if(IS_LEAF(tn)) {
950 + struct leaf *l = (struct leaf *) tn;
951 + call_rcu_bh(&l->rcu, __leaf_free_rcu);
952 + }
953 + else
954 + call_rcu(&tn->rcu, __tnode_free_rcu);
955 }
956
957 static struct leaf *leaf_new(void)
958 diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
959 index 8ee4d01..f75ff1d 100644
960 --- a/net/ipv4/ip_output.c
961 +++ b/net/ipv4/ip_output.c
962 @@ -1249,11 +1249,7 @@ int ip_push_pending_frames(struct sock *
963 iph->tos = inet->tos;
964 iph->tot_len = htons(skb->len);
965 iph->frag_off = df;
966 - if (!df) {
967 - __ip_select_ident(iph, &rt->u.dst, 0);
968 - } else {
969 - iph->id = htons(inet->id++);
970 - }
971 + ip_select_ident(iph, &rt->u.dst, sk);
972 iph->ttl = ttl;
973 iph->protocol = sk->sk_protocol;
974 iph->saddr = rt->rt_src;
975 diff --git a/net/ipv4/netfilter/ip_conntrack_netlink.c b/net/ipv4/netfilter/ip_conntrack_netlink.c
976 index e0b5926..d4e6d0a 100644
977 --- a/net/ipv4/netfilter/ip_conntrack_netlink.c
978 +++ b/net/ipv4/netfilter/ip_conntrack_netlink.c
979 @@ -1619,7 +1619,7 @@ static void __exit ctnetlink_exit(void)
980 printk("ctnetlink: unregistering from nfnetlink.\n");
981
982 #ifdef CONFIG_IP_NF_CONNTRACK_EVENTS
983 - ip_conntrack_unregister_notifier(&ctnl_notifier_exp);
984 + ip_conntrack_expect_unregister_notifier(&ctnl_notifier_exp);
985 ip_conntrack_unregister_notifier(&ctnl_notifier);
986 #endif
987
988 diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
989 index 9ff3463..40edeef 100644
990 --- a/net/netfilter/nf_conntrack_netlink.c
991 +++ b/net/netfilter/nf_conntrack_netlink.c
992 @@ -1641,7 +1641,7 @@ static void __exit ctnetlink_exit(void)
993 printk("ctnetlink: unregistering from nfnetlink.\n");
994
995 #ifdef CONFIG_NF_CONNTRACK_EVENTS
996 - nf_conntrack_unregister_notifier(&ctnl_notifier_exp);
997 + nf_conntrack_expect_unregister_notifier(&ctnl_notifier_exp);
998 nf_conntrack_unregister_notifier(&ctnl_notifier);
999 #endif
1000
1001 diff --git a/security/keys/key.c b/security/keys/key.c
1002 index 99781b7..0e2584e 100644
1003 --- a/security/keys/key.c
1004 +++ b/security/keys/key.c
1005 @@ -785,6 +785,10 @@ key_ref_t key_create_or_update(key_ref_t
1006
1007 key_check(keyring);
1008
1009 + key_ref = ERR_PTR(-ENOTDIR);
1010 + if (keyring->type != &key_type_keyring)
1011 + goto error_2;
1012 +
1013 down_write(&keyring->sem);
1014
1015 /* if we're going to allocate a new key, we're going to have
1016 diff --git a/security/keys/keyring.c b/security/keys/keyring.c
1017 index d65a180..bffa924 100644
1018 --- a/security/keys/keyring.c
1019 +++ b/security/keys/keyring.c
1020 @@ -437,6 +437,7 @@ EXPORT_SYMBOL(keyring_search);
1021 /*
1022 * search the given keyring only (no recursion)
1023 * - keyring must be locked by caller
1024 + * - caller must guarantee that the keyring is a keyring
1025 */
1026 key_ref_t __keyring_search_one(key_ref_t keyring_ref,
1027 const struct key_type *ktype,
1028 diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c
1029 index 63d96be..65b28cb 100644
1030 --- a/sound/isa/opti9xx/opti92x-ad1848.c
1031 +++ b/sound/isa/opti9xx/opti92x-ad1848.c
1032 @@ -2088,9 +2088,11 @@ static int __init alsa_card_opti9xx_init
1033 int error;
1034 struct platform_device *device;
1035
1036 +#ifdef CONFIG_PNP
1037 pnp_register_card_driver(&opti9xx_pnpc_driver);
1038 if (snd_opti9xx_pnp_is_probed)
1039 return 0;
1040 +#endif
1041 if (! is_isapnp_selected()) {
1042 error = platform_driver_register(&snd_opti9xx_driver);
1043 if (error < 0)
1044 @@ -2102,7 +2104,9 @@ static int __init alsa_card_opti9xx_init
1045 }
1046 platform_driver_unregister(&snd_opti9xx_driver);
1047 }
1048 +#ifdef CONFIG_PNP
1049 pnp_unregister_card_driver(&opti9xx_pnpc_driver);
1050 +#endif
1051 #ifdef MODULE
1052 printk(KERN_ERR "no OPTi " CHIP_NAME " soundcard found\n");
1053 #endif
1054 @@ -2115,7 +2119,9 @@ static void __exit alsa_card_opti9xx_exi
1055 platform_device_unregister(snd_opti9xx_platform_device);
1056 platform_driver_unregister(&snd_opti9xx_driver);
1057 }
1058 +#ifdef CONFIG_PNP
1059 pnp_unregister_card_driver(&opti9xx_pnpc_driver);
1060 +#endif
1061 }
1062
1063 module_init(alsa_card_opti9xx_init)
1064 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1065 index b767552..d5cd3a1 100644
1066 --- a/sound/pci/hda/patch_realtek.c
1067 +++ b/sound/pci/hda/patch_realtek.c
1068 @@ -2948,6 +2948,8 @@ static struct hda_board_config alc260_cf
1069 { .modelname = "basic", .config = ALC260_BASIC },
1070 { .pci_subvendor = 0x104d, .pci_subdevice = 0x81bb,
1071 .config = ALC260_BASIC }, /* Sony VAIO */
1072 + { .pci_subvendor = 0x152d, .pci_subdevice = 0x0729,
1073 + .config = ALC260_BASIC }, /* CTL Travel Master U553W */
1074 { .modelname = "hp", .config = ALC260_HP },
1075 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP },
1076 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP },