Contents of /trunk/kernel26-magellan/patches-2.6.17-r6/0107-2.6.17.14-all-fixes.patch
Parent Directory
|
Revision Log
Revision 105 -
(show annotations)
(download)
Sun Mar 11 16:17:56 2007 UTC (17 years, 6 months ago) by niro
File size: 15031 byte(s)
Sun Mar 11 16:17:56 2007 UTC (17 years, 6 months ago) by niro
File size: 15031 byte(s)
2.6.17-magellan-r6
1 | diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c |
2 | index e55b5c6..2031eda 100644 |
3 | --- a/arch/sparc64/kernel/time.c |
4 | +++ b/arch/sparc64/kernel/time.c |
5 | @@ -1105,7 +1105,7 @@ static struct time_interpolator sparc64_ |
6 | }; |
7 | |
8 | /* The quotient formula is taken from the IA64 port. */ |
9 | -#define SPARC64_NSEC_PER_CYC_SHIFT 30UL |
10 | +#define SPARC64_NSEC_PER_CYC_SHIFT 10UL |
11 | void __init time_init(void) |
12 | { |
13 | unsigned long clock = sparc64_init_timers(); |
14 | diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c |
15 | index 1539a83..562e10a 100644 |
16 | --- a/arch/sparc64/mm/init.c |
17 | +++ b/arch/sparc64/mm/init.c |
18 | @@ -902,8 +902,7 @@ #ifdef CONFIG_BLK_DEV_INITRD |
19 | if (sparc_ramdisk_image || sparc_ramdisk_image64) { |
20 | unsigned long ramdisk_image = sparc_ramdisk_image ? |
21 | sparc_ramdisk_image : sparc_ramdisk_image64; |
22 | - if (ramdisk_image >= (unsigned long)_end - 2 * PAGE_SIZE) |
23 | - ramdisk_image -= KERNBASE; |
24 | + ramdisk_image -= KERNBASE; |
25 | initrd_start = ramdisk_image + phys_base; |
26 | initrd_end = initrd_start + sparc_ramdisk_size; |
27 | if (initrd_end > end_of_phys_memory) { |
28 | diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c |
29 | index b72dde7..10467da 100644 |
30 | --- a/drivers/ide/ide-iops.c |
31 | +++ b/drivers/ide/ide-iops.c |
32 | @@ -597,6 +597,10 @@ u8 eighty_ninty_three (ide_drive_t *driv |
33 | { |
34 | if(HWIF(drive)->udma_four == 0) |
35 | return 0; |
36 | + |
37 | + /* Check for SATA but only if we are ATA5 or higher */ |
38 | + if (drive->id->hw_config == 0 && (drive->id->major_rev_num & 0x7FE0)) |
39 | + return 1; |
40 | if (!(drive->id->hw_config & 0x6000)) |
41 | return 0; |
42 | #ifndef CONFIG_IDEDMA_IVB |
43 | diff --git a/drivers/input/mouse/logips2pp.c b/drivers/input/mouse/logips2pp.c |
44 | index 2f0d288..54b696c 100644 |
45 | --- a/drivers/input/mouse/logips2pp.c |
46 | +++ b/drivers/input/mouse/logips2pp.c |
47 | @@ -238,8 +238,7 @@ static struct ps2pp_info *get_model_info |
48 | { 100, PS2PP_KIND_MX, /* MX510 */ |
49 | PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN | |
50 | PS2PP_EXTRA_BTN | PS2PP_NAV_BTN }, |
51 | - { 111, PS2PP_KIND_MX, /* MX300 */ |
52 | - PS2PP_WHEEL | PS2PP_EXTRA_BTN | PS2PP_TASK_BTN }, |
53 | + { 111, PS2PP_KIND_MX, PS2PP_WHEEL | PS2PP_SIDE_BTN }, /* MX300 reports task button as side */ |
54 | { 112, PS2PP_KIND_MX, /* MX500 */ |
55 | PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN | |
56 | PS2PP_EXTRA_BTN | PS2PP_NAV_BTN }, |
57 | diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c |
58 | index 2f0f358..e8e21b9 100644 |
59 | --- a/drivers/media/dvb/dvb-core/dvb_net.c |
60 | +++ b/drivers/media/dvb/dvb-core/dvb_net.c |
61 | @@ -492,7 +492,8 @@ #endif |
62 | } else |
63 | priv->ule_dbit = 0; |
64 | |
65 | - if (priv->ule_sndu_len > 32763) { |
66 | + if (priv->ule_sndu_len > 32763 || |
67 | + priv->ule_sndu_len < ((priv->ule_dbit) ? 4 : 4 + ETH_ALEN)) { |
68 | printk(KERN_WARNING "%lu: Invalid ULE SNDU length %u. " |
69 | "Resyncing.\n", priv->ts_count, priv->ule_sndu_len); |
70 | priv->ule_sndu_len = 0; |
71 | diff --git a/drivers/media/dvb/frontends/cx24123.c b/drivers/media/dvb/frontends/cx24123.c |
72 | index 691dc84..afb08ff 100644 |
73 | --- a/drivers/media/dvb/frontends/cx24123.c |
74 | +++ b/drivers/media/dvb/frontends/cx24123.c |
75 | @@ -579,8 +579,8 @@ static int cx24123_pll_calculate(struct |
76 | ndiv = ( ((p->frequency * vco_div * 10) / (2 * XTAL / 1000)) / 32) & 0x1ff; |
77 | adiv = ( ((p->frequency * vco_div * 10) / (2 * XTAL / 1000)) % 32) & 0x1f; |
78 | |
79 | - if (adiv == 0) |
80 | - ndiv++; |
81 | + if (adiv == 0 && ndiv > 0) |
82 | + ndiv--; |
83 | |
84 | /* control bits 11, refdiv 11, charge pump polarity 1, charge pump current, ndiv, adiv */ |
85 | state->pllarg = (3 << 19) | (3 << 17) | (1 << 16) | (pump << 14) | (ndiv << 5) | adiv; |
86 | diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c |
87 | index b806999..dd23219 100644 |
88 | --- a/drivers/media/video/msp3400-driver.c |
89 | +++ b/drivers/media/video/msp3400-driver.c |
90 | @@ -942,6 +942,8 @@ static int msp_attach(struct i2c_adapter |
91 | state->has_virtual_dolby_surround = msp_revision == 'G' && msp_prod_lo == 1; |
92 | /* Has Virtual Dolby Surround & Dolby Pro Logic: only in msp34x2 */ |
93 | state->has_dolby_pro_logic = msp_revision == 'G' && msp_prod_lo == 2; |
94 | + /* The msp343xG supports BTSC only and cannot do Automatic Standard Detection. */ |
95 | + state->force_btsc = msp_family == 3 && msp_revision == 'G' && msp_prod_hi == 3; |
96 | |
97 | state->opmode = opmode; |
98 | if (state->opmode == OPMODE_AUTO) { |
99 | diff --git a/drivers/media/video/msp3400-driver.h b/drivers/media/video/msp3400-driver.h |
100 | index 4e45104..6359d74 100644 |
101 | --- a/drivers/media/video/msp3400-driver.h |
102 | +++ b/drivers/media/video/msp3400-driver.h |
103 | @@ -64,6 +64,7 @@ struct msp_state { |
104 | u8 has_sound_processing; |
105 | u8 has_virtual_dolby_surround; |
106 | u8 has_dolby_pro_logic; |
107 | + u8 force_btsc; |
108 | |
109 | int radio; |
110 | int opmode; |
111 | diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c |
112 | index 633a102..a0ac592 100644 |
113 | --- a/drivers/media/video/msp3400-kthreads.c |
114 | +++ b/drivers/media/video/msp3400-kthreads.c |
115 | @@ -949,11 +949,12 @@ int msp34xxg_thread(void *data) |
116 | |
117 | /* setup the chip*/ |
118 | msp34xxg_reset(client); |
119 | - state->std = state->radio ? 0x40 : msp_standard; |
120 | - if (state->std != 1) |
121 | - goto unmute; |
122 | + state->std = state->radio ? 0x40 : |
123 | + (state->force_btsc && msp_standard == 1) ? 32 : msp_standard; |
124 | /* start autodetect */ |
125 | msp_write_dem(client, 0x20, state->std); |
126 | + if (state->std != 1) |
127 | + goto unmute; |
128 | |
129 | /* watch autodetect */ |
130 | v4l_dbg(1, msp_debug, client, "started autodetect, waiting for result\n"); |
131 | diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c |
132 | index 587458b..96049e2 100644 |
133 | --- a/drivers/mmc/mmc_block.c |
134 | +++ b/drivers/mmc/mmc_block.c |
135 | @@ -325,52 +325,11 @@ static struct mmc_blk_data *mmc_blk_allo |
136 | md->read_only = mmc_blk_readonly(card); |
137 | |
138 | /* |
139 | - * Figure out a workable block size. MMC cards have: |
140 | - * - two block sizes, one for read and one for write. |
141 | - * - may support partial reads and/or writes |
142 | - * (allows block sizes smaller than specified) |
143 | + * Both SD and MMC specifications state (although a bit |
144 | + * unclearly in the MMC case) that a block size of 512 |
145 | + * bytes must always be supported by the card. |
146 | */ |
147 | - md->block_bits = card->csd.read_blkbits; |
148 | - if (card->csd.write_blkbits != card->csd.read_blkbits) { |
149 | - if (card->csd.write_blkbits < card->csd.read_blkbits && |
150 | - card->csd.read_partial) { |
151 | - /* |
152 | - * write block size is smaller than read block |
153 | - * size, but we support partial reads, so choose |
154 | - * the smaller write block size. |
155 | - */ |
156 | - md->block_bits = card->csd.write_blkbits; |
157 | - } else if (card->csd.write_blkbits > card->csd.read_blkbits && |
158 | - card->csd.write_partial) { |
159 | - /* |
160 | - * read block size is smaller than write block |
161 | - * size, but we support partial writes. Use read |
162 | - * block size. |
163 | - */ |
164 | - } else { |
165 | - /* |
166 | - * We don't support this configuration for writes. |
167 | - */ |
168 | - printk(KERN_ERR "%s: unable to select block size for " |
169 | - "writing (rb%u wb%u rp%u wp%u)\n", |
170 | - mmc_card_id(card), |
171 | - 1 << card->csd.read_blkbits, |
172 | - 1 << card->csd.write_blkbits, |
173 | - card->csd.read_partial, |
174 | - card->csd.write_partial); |
175 | - md->read_only = 1; |
176 | - } |
177 | - } |
178 | - |
179 | - /* |
180 | - * Refuse to allow block sizes smaller than 512 bytes. |
181 | - */ |
182 | - if (md->block_bits < 9) { |
183 | - printk(KERN_ERR "%s: unable to support block size %u\n", |
184 | - mmc_card_id(card), 1 << md->block_bits); |
185 | - ret = -EINVAL; |
186 | - goto err_kfree; |
187 | - } |
188 | + md->block_bits = 9; |
189 | |
190 | md->disk = alloc_disk(1 << MMC_SHIFT); |
191 | if (md->disk == NULL) { |
192 | diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c |
193 | index 71f4505..aeda7ad 100644 |
194 | --- a/drivers/net/pcmcia/xirc2ps_cs.c |
195 | +++ b/drivers/net/pcmcia/xirc2ps_cs.c |
196 | @@ -345,6 +345,7 @@ typedef struct local_info_t { |
197 | void __iomem *dingo_ccr; /* only used for CEM56 cards */ |
198 | unsigned last_ptr_value; /* last packets transmitted value */ |
199 | const char *manf_str; |
200 | + struct work_struct tx_timeout_task; |
201 | } local_info_t; |
202 | |
203 | /**************** |
204 | @@ -352,6 +353,7 @@ typedef struct local_info_t { |
205 | */ |
206 | static int do_start_xmit(struct sk_buff *skb, struct net_device *dev); |
207 | static void do_tx_timeout(struct net_device *dev); |
208 | +static void xirc2ps_tx_timeout_task(void *data); |
209 | static struct net_device_stats *do_get_stats(struct net_device *dev); |
210 | static void set_addresses(struct net_device *dev); |
211 | static void set_multicast_list(struct net_device *dev); |
212 | @@ -589,6 +591,7 @@ xirc2ps_probe(struct pcmcia_device *link |
213 | #ifdef HAVE_TX_TIMEOUT |
214 | dev->tx_timeout = do_tx_timeout; |
215 | dev->watchdog_timeo = TX_TIMEOUT; |
216 | + INIT_WORK(&local->tx_timeout_task, xirc2ps_tx_timeout_task, dev); |
217 | #endif |
218 | |
219 | return xirc2ps_config(link); |
220 | @@ -1341,17 +1344,24 @@ xirc2ps_interrupt(int irq, void *dev_id, |
221 | /*====================================================================*/ |
222 | |
223 | static void |
224 | -do_tx_timeout(struct net_device *dev) |
225 | +xirc2ps_tx_timeout_task(void *data) |
226 | { |
227 | - local_info_t *lp = netdev_priv(dev); |
228 | - printk(KERN_NOTICE "%s: transmit timed out\n", dev->name); |
229 | - lp->stats.tx_errors++; |
230 | + struct net_device *dev = data; |
231 | /* reset the card */ |
232 | do_reset(dev,1); |
233 | dev->trans_start = jiffies; |
234 | netif_wake_queue(dev); |
235 | } |
236 | |
237 | +static void |
238 | +do_tx_timeout(struct net_device *dev) |
239 | +{ |
240 | + local_info_t *lp = netdev_priv(dev); |
241 | + lp->stats.tx_errors++; |
242 | + printk(KERN_NOTICE "%s: transmit timed out\n", dev->name); |
243 | + schedule_work(&lp->tx_timeout_task); |
244 | +} |
245 | + |
246 | static int |
247 | do_start_xmit(struct sk_buff *skb, struct net_device *dev) |
248 | { |
249 | diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
250 | index 6e3786f..c19ffa6 100644 |
251 | --- a/drivers/pci/quirks.c |
252 | +++ b/drivers/pci/quirks.c |
253 | @@ -390,6 +390,7 @@ static void __devinit quirk_piix4_acpi(s |
254 | piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20); |
255 | } |
256 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi ); |
257 | +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_3, quirk_piix4_acpi ); |
258 | |
259 | /* |
260 | * ICH4, ICH4-M, ICH5, ICH5-M ACPI: Three IO regions pointed to by longwords at |
261 | diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c |
262 | index b4f8fb1..2dcfc1b 100644 |
263 | --- a/drivers/scsi/ahci.c |
264 | +++ b/drivers/scsi/ahci.c |
265 | @@ -548,6 +548,12 @@ static int ahci_softreset(struct ata_por |
266 | |
267 | DPRINTK("ENTER\n"); |
268 | |
269 | + if (!sata_dev_present(ap)) { |
270 | + DPRINTK("PHY reports no device\n"); |
271 | + *class = ATA_DEV_NONE; |
272 | + return 0; |
273 | + } |
274 | + |
275 | /* prepare for SRST (AHCI-1.1 10.4.1) */ |
276 | rc = ahci_stop_engine(ap); |
277 | if (rc) { |
278 | diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c |
279 | index 21b8bf4..f9be16e 100644 |
280 | --- a/fs/ext3/inode.c |
281 | +++ b/fs/ext3/inode.c |
282 | @@ -926,7 +926,7 @@ int ext3_get_blocks_handle(handle_t *han |
283 | set_buffer_new(bh_result); |
284 | got_it: |
285 | map_bh(bh_result, inode->i_sb, le32_to_cpu(chain[depth-1].key)); |
286 | - if (blocks_to_boundary == 0) |
287 | + if (count > blocks_to_boundary) |
288 | set_buffer_boundary(bh_result); |
289 | err = count; |
290 | /* Clean up and exit */ |
291 | diff --git a/fs/lockd/svcsubs.c b/fs/lockd/svcsubs.c |
292 | index a570e5c..ef9c953 100644 |
293 | --- a/fs/lockd/svcsubs.c |
294 | +++ b/fs/lockd/svcsubs.c |
295 | @@ -238,19 +238,22 @@ static int |
296 | nlm_traverse_files(struct nlm_host *host, int action) |
297 | { |
298 | struct nlm_file *file, **fp; |
299 | - int i; |
300 | + int i, ret = 0; |
301 | |
302 | mutex_lock(&nlm_file_mutex); |
303 | for (i = 0; i < FILE_NRHASH; i++) { |
304 | fp = nlm_files + i; |
305 | while ((file = *fp) != NULL) { |
306 | + file->f_count++; |
307 | + mutex_unlock(&nlm_file_mutex); |
308 | + |
309 | /* Traverse locks, blocks and shares of this file |
310 | * and update file->f_locks count */ |
311 | - if (nlm_inspect_file(host, file, action)) { |
312 | - mutex_unlock(&nlm_file_mutex); |
313 | - return 1; |
314 | - } |
315 | + if (nlm_inspect_file(host, file, action)) |
316 | + ret = 1; |
317 | |
318 | + mutex_lock(&nlm_file_mutex); |
319 | + file->f_count--; |
320 | /* No more references to this file. Let go of it. */ |
321 | if (!file->f_blocks && !file->f_locks |
322 | && !file->f_shares && !file->f_count) { |
323 | @@ -263,7 +266,7 @@ nlm_traverse_files(struct nlm_host *host |
324 | } |
325 | } |
326 | mutex_unlock(&nlm_file_mutex); |
327 | - return 0; |
328 | + return ret; |
329 | } |
330 | |
331 | /* |
332 | diff --git a/fs/nfs/file.c b/fs/nfs/file.c |
333 | index fade02c..801cc0f 100644 |
334 | --- a/fs/nfs/file.c |
335 | +++ b/fs/nfs/file.c |
336 | @@ -325,7 +325,13 @@ static void nfs_invalidate_page(struct p |
337 | |
338 | static int nfs_release_page(struct page *page, gfp_t gfp) |
339 | { |
340 | - return !nfs_wb_page(page->mapping->host, page); |
341 | + if (gfp & __GFP_FS) |
342 | + return !nfs_wb_page(page->mapping->host, page); |
343 | + else |
344 | + /* |
345 | + * Avoid deadlock on nfs_wait_on_request(). |
346 | + */ |
347 | + return 0; |
348 | } |
349 | |
350 | struct address_space_operations nfs_file_aops = { |
351 | diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c |
352 | index d86c0db..e790ba5 100644 |
353 | --- a/fs/nfs/nfs4proc.c |
354 | +++ b/fs/nfs/nfs4proc.c |
355 | @@ -185,15 +185,15 @@ static void renew_lease(const struct nfs |
356 | spin_unlock(&clp->cl_lock); |
357 | } |
358 | |
359 | -static void update_changeattr(struct inode *inode, struct nfs4_change_info *cinfo) |
360 | +static void update_changeattr(struct inode *dir, struct nfs4_change_info *cinfo) |
361 | { |
362 | - struct nfs_inode *nfsi = NFS_I(inode); |
363 | + struct nfs_inode *nfsi = NFS_I(dir); |
364 | |
365 | - spin_lock(&inode->i_lock); |
366 | - nfsi->cache_validity |= NFS_INO_INVALID_ATTR; |
367 | + spin_lock(&dir->i_lock); |
368 | + nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_DATA; |
369 | if (cinfo->before == nfsi->change_attr && cinfo->atomic) |
370 | nfsi->change_attr = cinfo->after; |
371 | - spin_unlock(&inode->i_lock); |
372 | + spin_unlock(&dir->i_lock); |
373 | } |
374 | |
375 | struct nfs4_opendata { |
376 | diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c |
377 | index cf37866..5bb3e17 100644 |
378 | --- a/fs/sysfs/file.c |
379 | +++ b/fs/sysfs/file.c |
380 | @@ -483,11 +483,6 @@ int sysfs_update_file(struct kobject * k |
381 | (victim->d_parent->d_inode == dir->d_inode)) { |
382 | victim->d_inode->i_mtime = CURRENT_TIME; |
383 | fsnotify_modify(victim); |
384 | - |
385 | - /** |
386 | - * Drop reference from initial sysfs_get_dentry(). |
387 | - */ |
388 | - dput(victim); |
389 | res = 0; |
390 | } else |
391 | d_drop(victim); |
392 | diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h |
393 | index c71227d..1d81e7d 100644 |
394 | --- a/include/linux/nfs_fs.h |
395 | +++ b/include/linux/nfs_fs.h |
396 | @@ -234,8 +234,12 @@ static inline int nfs_caches_unstable(st |
397 | |
398 | static inline void nfs_mark_for_revalidate(struct inode *inode) |
399 | { |
400 | + struct nfs_inode *nfsi = NFS_I(inode); |
401 | + |
402 | spin_lock(&inode->i_lock); |
403 | - NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS; |
404 | + nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS; |
405 | + if (S_ISDIR(inode->i_mode)) |
406 | + nfsi->cache_validity |= NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_DATA; |
407 | spin_unlock(&inode->i_lock); |
408 | } |
409 | |
410 | diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h |
411 | index e8bbe81..e615957 100644 |
412 | --- a/include/linux/sunrpc/xprt.h |
413 | +++ b/include/linux/sunrpc/xprt.h |
414 | @@ -37,7 +37,7 @@ extern unsigned int xprt_max_resvport; |
415 | |
416 | #define RPC_MIN_RESVPORT (1U) |
417 | #define RPC_MAX_RESVPORT (65535U) |
418 | -#define RPC_DEF_MIN_RESVPORT (650U) |
419 | +#define RPC_DEF_MIN_RESVPORT (665U) |
420 | #define RPC_DEF_MAX_RESVPORT (1023U) |
421 | |
422 | /* |
423 | diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c |
424 | index dfb300b..0f42544 100644 |
425 | --- a/net/sched/cls_basic.c |
426 | +++ b/net/sched/cls_basic.c |
427 | @@ -197,7 +197,7 @@ static int basic_change(struct tcf_proto |
428 | if (handle) |
429 | f->handle = handle; |
430 | else { |
431 | - int i = 0x80000000; |
432 | + unsigned int i = 0x80000000; |
433 | do { |
434 | if (++head->hgenerator == 0x7FFFFFFF) |
435 | head->hgenerator = 1; |