Contents of /trunk/kernel26-magellan/patches-2.6.16-r5/0100-2.6.16-patch-2.6.16.4_fixed
Parent Directory | Revision Log
Revision 67 -
(show annotations)
(download)
Wed Apr 12 18:59:30 2006 UTC (18 years, 2 months ago) by niro
File size: 36373 byte(s)
Wed Apr 12 18:59:30 2006 UTC (18 years, 2 months 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 }, |