Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.17-r6/0107-2.6.17.14-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 199 - (hide annotations) (download)
Fri May 18 11:04:36 2007 UTC (17 years ago) by niro
File size: 15031 byte(s)
-import

1 niro 199 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;