Contents of /trunk/kernel26-alx/patches-2.6.27-r3/0134-2.6.27.35-all-fixes.patch
Parent Directory | Revision Log
Revision 1176 -
(show annotations)
(download)
Thu Oct 14 15:11:06 2010 UTC (14 years ago) by niro
File size: 16308 byte(s)
Thu Oct 14 15:11:06 2010 UTC (14 years ago) by niro
File size: 16308 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 | diff --git a/arch/powerpc/include/asm/mmu-hash64.h b/arch/powerpc/include/asm/mmu-hash64.h |
2 | index c2df53c..cd1f704 100644 |
3 | --- a/arch/powerpc/include/asm/mmu-hash64.h |
4 | +++ b/arch/powerpc/include/asm/mmu-hash64.h |
5 | @@ -41,6 +41,7 @@ extern char initial_stab[]; |
6 | |
7 | #define SLB_NUM_BOLTED 3 |
8 | #define SLB_CACHE_ENTRIES 8 |
9 | +#define SLB_MIN_SIZE 32 |
10 | |
11 | /* Bits in the SLB ESID word */ |
12 | #define SLB_ESID_V ASM_CONST(0x0000000008000000) /* valid */ |
13 | @@ -299,6 +300,7 @@ extern void slb_flush_and_rebolt(void); |
14 | extern void stab_initialize(unsigned long stab); |
15 | |
16 | extern void slb_vmalloc_update(void); |
17 | +extern void slb_set_size(u16 size); |
18 | #endif /* __ASSEMBLY__ */ |
19 | |
20 | /* |
21 | diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c |
22 | index b3eef30..c729910 100644 |
23 | --- a/arch/powerpc/kernel/lparcfg.c |
24 | +++ b/arch/powerpc/kernel/lparcfg.c |
25 | @@ -35,6 +35,7 @@ |
26 | #include <asm/prom.h> |
27 | #include <asm/vdso_datapage.h> |
28 | #include <asm/vio.h> |
29 | +#include <asm/mmu.h> |
30 | |
31 | #define MODULE_VERS "1.8" |
32 | #define MODULE_NAME "lparcfg" |
33 | @@ -485,6 +486,8 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v) |
34 | |
35 | seq_printf(m, "shared_processor_mode=%d\n", lppaca[0].shared_proc); |
36 | |
37 | + seq_printf(m, "slb_size=%d\n", mmu_slb_size); |
38 | + |
39 | return 0; |
40 | } |
41 | |
42 | diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c |
43 | index 1f8505c..49e6d91 100644 |
44 | --- a/arch/powerpc/kernel/rtas.c |
45 | +++ b/arch/powerpc/kernel/rtas.c |
46 | @@ -38,6 +38,7 @@ |
47 | #include <asm/syscalls.h> |
48 | #include <asm/smp.h> |
49 | #include <asm/atomic.h> |
50 | +#include <asm/mmu.h> |
51 | |
52 | struct rtas_t rtas = { |
53 | .lock = SPIN_LOCK_UNLOCKED |
54 | @@ -665,6 +666,7 @@ static void rtas_percpu_suspend_me(void *info) |
55 | { |
56 | long rc; |
57 | unsigned long msr_save; |
58 | + u16 slb_size = mmu_slb_size; |
59 | int cpu; |
60 | struct rtas_suspend_me_data *data = |
61 | (struct rtas_suspend_me_data *)info; |
62 | @@ -686,13 +688,16 @@ static void rtas_percpu_suspend_me(void *info) |
63 | /* All other cpus are in H_JOIN, this cpu does |
64 | * the suspend. |
65 | */ |
66 | + slb_set_size(SLB_MIN_SIZE); |
67 | printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n", |
68 | smp_processor_id()); |
69 | data->error = rtas_call(data->token, 0, 1, NULL); |
70 | |
71 | - if (data->error) |
72 | + if (data->error) { |
73 | printk(KERN_DEBUG "ibm,suspend-me returned %d\n", |
74 | data->error); |
75 | + slb_set_size(slb_size); |
76 | + } |
77 | } else { |
78 | printk(KERN_ERR "H_JOIN on cpu %i failed with rc = %ld\n", |
79 | smp_processor_id(), rc); |
80 | diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c |
81 | index 89497fb..4d73765 100644 |
82 | --- a/arch/powerpc/mm/slb.c |
83 | +++ b/arch/powerpc/mm/slb.c |
84 | @@ -247,14 +247,22 @@ void switch_slb(struct task_struct *tsk, struct mm_struct *mm) |
85 | static inline void patch_slb_encoding(unsigned int *insn_addr, |
86 | unsigned int immed) |
87 | { |
88 | - /* Assume the instruction had a "0" immediate value, just |
89 | - * "or" in the new value |
90 | - */ |
91 | - *insn_addr |= immed; |
92 | + *insn_addr = (*insn_addr & 0xffff0000) | immed; |
93 | flush_icache_range((unsigned long)insn_addr, 4+ |
94 | (unsigned long)insn_addr); |
95 | } |
96 | |
97 | +void slb_set_size(u16 size) |
98 | +{ |
99 | + extern unsigned int *slb_compare_rr_to_size; |
100 | + |
101 | + if (mmu_slb_size == size) |
102 | + return; |
103 | + |
104 | + mmu_slb_size = size; |
105 | + patch_slb_encoding(slb_compare_rr_to_size, mmu_slb_size); |
106 | +} |
107 | + |
108 | void slb_initialize(void) |
109 | { |
110 | unsigned long linear_llp, vmalloc_llp, io_llp; |
111 | diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c |
112 | index 7637bd3..e67e18d 100644 |
113 | --- a/arch/powerpc/platforms/pseries/reconfig.c |
114 | +++ b/arch/powerpc/platforms/pseries/reconfig.c |
115 | @@ -20,6 +20,7 @@ |
116 | #include <asm/machdep.h> |
117 | #include <asm/uaccess.h> |
118 | #include <asm/pSeries_reconfig.h> |
119 | +#include <asm/mmu.h> |
120 | |
121 | |
122 | |
123 | @@ -439,9 +440,15 @@ static int do_update_property(char *buf, size_t bufsize) |
124 | if (!newprop) |
125 | return -ENOMEM; |
126 | |
127 | + if (!strcmp(name, "slb-size") || !strcmp(name, "ibm,slb-size")) |
128 | + slb_set_size(*(int *)value); |
129 | + |
130 | oldprop = of_find_property(np, name,NULL); |
131 | - if (!oldprop) |
132 | + if (!oldprop) { |
133 | + if (strlen(name)) |
134 | + return prom_add_property(np, newprop); |
135 | return -ENODEV; |
136 | + } |
137 | |
138 | rc = prom_update_property(np, newprop, oldprop); |
139 | if (rc) |
140 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c |
141 | index 2bcf350..5cdd821 100644 |
142 | --- a/drivers/ata/libata-core.c |
143 | +++ b/drivers/ata/libata-core.c |
144 | @@ -565,7 +565,13 @@ u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev) |
145 | head = tf->device & 0xf; |
146 | sect = tf->lbal; |
147 | |
148 | - block = (cyl * dev->heads + head) * dev->sectors + sect; |
149 | + if (!sect) { |
150 | + ata_dev_printk(dev, KERN_WARNING, "device reported " |
151 | + "invalid CHS sector 0\n"); |
152 | + sect = 1; /* oh well */ |
153 | + } |
154 | + |
155 | + block = (cyl * dev->heads + head) * dev->sectors + sect - 1; |
156 | } |
157 | |
158 | return block; |
159 | diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c |
160 | index ed1879c..4180b55 100644 |
161 | --- a/drivers/char/tpm/tpm_tis.c |
162 | +++ b/drivers/char/tpm/tpm_tis.c |
163 | @@ -450,6 +450,12 @@ static int tpm_tis_init(struct device *dev, resource_size_t start, |
164 | goto out_err; |
165 | } |
166 | |
167 | + /* Default timeouts */ |
168 | + chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT); |
169 | + chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT); |
170 | + chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT); |
171 | + chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT); |
172 | + |
173 | if (request_locality(chip, 0) != 0) { |
174 | rc = -ENODEV; |
175 | goto out_err; |
176 | @@ -457,12 +463,6 @@ static int tpm_tis_init(struct device *dev, resource_size_t start, |
177 | |
178 | vendor = ioread32(chip->vendor.iobase + TPM_DID_VID(0)); |
179 | |
180 | - /* Default timeouts */ |
181 | - chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT); |
182 | - chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT); |
183 | - chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT); |
184 | - chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT); |
185 | - |
186 | dev_info(dev, |
187 | "1.2 TPM (device-id 0x%X, rev-id %d)\n", |
188 | vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0))); |
189 | diff --git a/drivers/ps3/ps3stor_lib.c b/drivers/ps3/ps3stor_lib.c |
190 | index 55955f1..40169a1 100644 |
191 | --- a/drivers/ps3/ps3stor_lib.c |
192 | +++ b/drivers/ps3/ps3stor_lib.c |
193 | @@ -23,6 +23,65 @@ |
194 | #include <asm/lv1call.h> |
195 | #include <asm/ps3stor.h> |
196 | |
197 | +/* |
198 | + * A workaround for flash memory I/O errors when the internal hard disk |
199 | + * has not been formatted for OtherOS use. Delay disk close until flash |
200 | + * memory is closed. |
201 | + */ |
202 | + |
203 | +static struct ps3_flash_workaround { |
204 | + int flash_open; |
205 | + int disk_open; |
206 | + struct ps3_system_bus_device *disk_sbd; |
207 | +} ps3_flash_workaround; |
208 | + |
209 | +static int ps3stor_open_hv_device(struct ps3_system_bus_device *sbd) |
210 | +{ |
211 | + int error = ps3_open_hv_device(sbd); |
212 | + |
213 | + if (error) |
214 | + return error; |
215 | + |
216 | + if (sbd->match_id == PS3_MATCH_ID_STOR_FLASH) |
217 | + ps3_flash_workaround.flash_open = 1; |
218 | + |
219 | + if (sbd->match_id == PS3_MATCH_ID_STOR_DISK) |
220 | + ps3_flash_workaround.disk_open = 1; |
221 | + |
222 | + return 0; |
223 | +} |
224 | + |
225 | +static int ps3stor_close_hv_device(struct ps3_system_bus_device *sbd) |
226 | +{ |
227 | + int error; |
228 | + |
229 | + if (sbd->match_id == PS3_MATCH_ID_STOR_DISK |
230 | + && ps3_flash_workaround.disk_open |
231 | + && ps3_flash_workaround.flash_open) { |
232 | + ps3_flash_workaround.disk_sbd = sbd; |
233 | + return 0; |
234 | + } |
235 | + |
236 | + error = ps3_close_hv_device(sbd); |
237 | + |
238 | + if (error) |
239 | + return error; |
240 | + |
241 | + if (sbd->match_id == PS3_MATCH_ID_STOR_DISK) |
242 | + ps3_flash_workaround.disk_open = 0; |
243 | + |
244 | + if (sbd->match_id == PS3_MATCH_ID_STOR_FLASH) { |
245 | + ps3_flash_workaround.flash_open = 0; |
246 | + |
247 | + if (ps3_flash_workaround.disk_sbd) { |
248 | + ps3_close_hv_device(ps3_flash_workaround.disk_sbd); |
249 | + ps3_flash_workaround.disk_open = 0; |
250 | + ps3_flash_workaround.disk_sbd = NULL; |
251 | + } |
252 | + } |
253 | + |
254 | + return 0; |
255 | +} |
256 | |
257 | static int ps3stor_probe_access(struct ps3_storage_device *dev) |
258 | { |
259 | @@ -90,7 +149,7 @@ int ps3stor_setup(struct ps3_storage_device *dev, irq_handler_t handler) |
260 | int error, res, alignment; |
261 | enum ps3_dma_page_size page_size; |
262 | |
263 | - error = ps3_open_hv_device(&dev->sbd); |
264 | + error = ps3stor_open_hv_device(&dev->sbd); |
265 | if (error) { |
266 | dev_err(&dev->sbd.core, |
267 | "%s:%u: ps3_open_hv_device failed %d\n", __func__, |
268 | @@ -166,7 +225,7 @@ fail_free_irq: |
269 | fail_sb_event_receive_port_destroy: |
270 | ps3_sb_event_receive_port_destroy(&dev->sbd, dev->irq); |
271 | fail_close_device: |
272 | - ps3_close_hv_device(&dev->sbd); |
273 | + ps3stor_close_hv_device(&dev->sbd); |
274 | fail: |
275 | return error; |
276 | } |
277 | @@ -193,7 +252,7 @@ void ps3stor_teardown(struct ps3_storage_device *dev) |
278 | "%s:%u: destroy event receive port failed %d\n", |
279 | __func__, __LINE__, error); |
280 | |
281 | - error = ps3_close_hv_device(&dev->sbd); |
282 | + error = ps3stor_close_hv_device(&dev->sbd); |
283 | if (error) |
284 | dev_err(&dev->sbd.core, |
285 | "%s:%u: ps3_close_hv_device failed %d\n", __func__, |
286 | diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c |
287 | index a6f8b8f..e012475 100644 |
288 | --- a/fs/binfmt_elf.c |
289 | +++ b/fs/binfmt_elf.c |
290 | @@ -496,22 +496,22 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex, |
291 | } |
292 | } |
293 | |
294 | - /* |
295 | - * Now fill out the bss section. First pad the last page up |
296 | - * to the page boundary, and then perform a mmap to make sure |
297 | - * that there are zero-mapped pages up to and including the |
298 | - * last bss page. |
299 | - */ |
300 | - if (padzero(elf_bss)) { |
301 | - error = -EFAULT; |
302 | - goto out_close; |
303 | - } |
304 | + if (last_bss > elf_bss) { |
305 | + /* |
306 | + * Now fill out the bss section. First pad the last page up |
307 | + * to the page boundary, and then perform a mmap to make sure |
308 | + * that there are zero-mapped pages up to and including the |
309 | + * last bss page. |
310 | + */ |
311 | + if (padzero(elf_bss)) { |
312 | + error = -EFAULT; |
313 | + goto out_close; |
314 | + } |
315 | |
316 | - /* What we have mapped so far */ |
317 | - elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); |
318 | + /* What we have mapped so far */ |
319 | + elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); |
320 | |
321 | - /* Map the last of the bss segment */ |
322 | - if (last_bss > elf_bss) { |
323 | + /* Map the last of the bss segment */ |
324 | down_write(¤t->mm->mmap_sem); |
325 | error = do_brk(elf_bss, last_bss - elf_bss); |
326 | up_write(¤t->mm->mmap_sem); |
327 | diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c |
328 | index 4d617ea..988530d 100644 |
329 | --- a/fs/nfsd/nfs3proc.c |
330 | +++ b/fs/nfsd/nfs3proc.c |
331 | @@ -201,6 +201,7 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, |
332 | struct nfsd3_writeres *resp) |
333 | { |
334 | __be32 nfserr; |
335 | + unsigned long cnt = argp->len; |
336 | |
337 | dprintk("nfsd: WRITE(3) %s %d bytes at %ld%s\n", |
338 | SVCFH_fmt(&argp->fh), |
339 | @@ -213,9 +214,9 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, |
340 | nfserr = nfsd_write(rqstp, &resp->fh, NULL, |
341 | argp->offset, |
342 | rqstp->rq_vec, argp->vlen, |
343 | - argp->len, |
344 | + &cnt, |
345 | &resp->committed); |
346 | - resp->count = argp->count; |
347 | + resp->count = cnt; |
348 | RETURN_STATUS(nfserr); |
349 | } |
350 | |
351 | diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c |
352 | index e5b51ff..fddc656 100644 |
353 | --- a/fs/nfsd/nfs4proc.c |
354 | +++ b/fs/nfsd/nfs4proc.c |
355 | @@ -685,6 +685,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, |
356 | struct file *filp = NULL; |
357 | u32 *p; |
358 | __be32 status = nfs_ok; |
359 | + unsigned long cnt; |
360 | |
361 | /* no need to check permission - this will be done in nfsd_write() */ |
362 | |
363 | @@ -703,7 +704,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, |
364 | return status; |
365 | } |
366 | |
367 | - write->wr_bytes_written = write->wr_buflen; |
368 | + cnt = write->wr_buflen; |
369 | write->wr_how_written = write->wr_stable_how; |
370 | p = (u32 *)write->wr_verifier.data; |
371 | *p++ = nfssvc_boot.tv_sec; |
372 | @@ -711,10 +712,12 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, |
373 | |
374 | status = nfsd_write(rqstp, &cstate->current_fh, filp, |
375 | write->wr_offset, rqstp->rq_vec, write->wr_vlen, |
376 | - write->wr_buflen, &write->wr_how_written); |
377 | + &cnt, &write->wr_how_written); |
378 | if (filp) |
379 | fput(filp); |
380 | |
381 | + write->wr_bytes_written = cnt; |
382 | + |
383 | if (status == nfserr_symlink) |
384 | status = nfserr_inval; |
385 | return status; |
386 | diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c |
387 | index 0766f95..20c63b2 100644 |
388 | --- a/fs/nfsd/nfsproc.c |
389 | +++ b/fs/nfsd/nfsproc.c |
390 | @@ -179,6 +179,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, |
391 | { |
392 | __be32 nfserr; |
393 | int stable = 1; |
394 | + unsigned long cnt = argp->len; |
395 | |
396 | dprintk("nfsd: WRITE %s %d bytes at %d\n", |
397 | SVCFH_fmt(&argp->fh), |
398 | @@ -187,7 +188,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, |
399 | nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL, |
400 | argp->offset, |
401 | rqstp->rq_vec, argp->vlen, |
402 | - argp->len, |
403 | + &cnt, |
404 | &stable); |
405 | return nfsd_return_attrs(nfserr, resp); |
406 | } |
407 | diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c |
408 | index 18060be..ac31e0c 100644 |
409 | --- a/fs/nfsd/vfs.c |
410 | +++ b/fs/nfsd/vfs.c |
411 | @@ -957,7 +957,7 @@ static void kill_suid(struct dentry *dentry) |
412 | static __be32 |
413 | nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
414 | loff_t offset, struct kvec *vec, int vlen, |
415 | - unsigned long cnt, int *stablep) |
416 | + unsigned long *cnt, int *stablep) |
417 | { |
418 | struct svc_export *exp; |
419 | struct dentry *dentry; |
420 | @@ -971,7 +971,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
421 | err = nfserr_perm; |
422 | |
423 | if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && |
424 | - (!lock_may_write(file->f_path.dentry->d_inode, offset, cnt))) |
425 | + (!lock_may_write(file->f_path.dentry->d_inode, offset, *cnt))) |
426 | goto out; |
427 | #endif |
428 | |
429 | @@ -1003,7 +1003,8 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
430 | host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset); |
431 | set_fs(oldfs); |
432 | if (host_err >= 0) { |
433 | - nfsdstats.io_write += cnt; |
434 | + *cnt = host_err; |
435 | + nfsdstats.io_write += host_err; |
436 | fsnotify_modify(file->f_path.dentry); |
437 | } |
438 | |
439 | @@ -1050,7 +1051,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
440 | dprintk("nfsd: write complete host_err=%d\n", host_err); |
441 | if (host_err >= 0) |
442 | err = 0; |
443 | - else |
444 | + else |
445 | err = nfserrno(host_err); |
446 | out: |
447 | return err; |
448 | @@ -1092,7 +1093,7 @@ out: |
449 | */ |
450 | __be32 |
451 | nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
452 | - loff_t offset, struct kvec *vec, int vlen, unsigned long cnt, |
453 | + loff_t offset, struct kvec *vec, int vlen, unsigned long *cnt, |
454 | int *stablep) |
455 | { |
456 | __be32 err = 0; |
457 | diff --git a/fs/udf/lowlevel.c b/fs/udf/lowlevel.c |
458 | index 703843f..1b88fd5 100644 |
459 | --- a/fs/udf/lowlevel.c |
460 | +++ b/fs/udf/lowlevel.c |
461 | @@ -56,7 +56,12 @@ unsigned long udf_get_last_block(struct super_block *sb) |
462 | struct block_device *bdev = sb->s_bdev; |
463 | unsigned long lblock = 0; |
464 | |
465 | - if (ioctl_by_bdev(bdev, CDROM_LAST_WRITTEN, (unsigned long) &lblock)) |
466 | + /* |
467 | + * ioctl failed or returned obviously bogus value? |
468 | + * Try using the device size... |
469 | + */ |
470 | + if (ioctl_by_bdev(bdev, CDROM_LAST_WRITTEN, (unsigned long) &lblock) || |
471 | + lblock == 0) |
472 | lblock = bdev->bd_inode->i_size >> sb->s_blocksize_bits; |
473 | |
474 | if (lblock) |
475 | diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h |
476 | index 108f47e..9af9bca 100644 |
477 | --- a/include/linux/nfsd/nfsd.h |
478 | +++ b/include/linux/nfsd/nfsd.h |
479 | @@ -105,7 +105,7 @@ void nfsd_close(struct file *); |
480 | __be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, |
481 | loff_t, struct kvec *, int, unsigned long *); |
482 | __be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, |
483 | - loff_t, struct kvec *,int, unsigned long, int *); |
484 | + loff_t, struct kvec *,int, unsigned long *, int *); |
485 | __be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *, |
486 | char *, int *); |
487 | __be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *, |
488 | diff --git a/sound/pci/cs46xx/cs46xx_lib.h b/sound/pci/cs46xx/cs46xx_lib.h |
489 | index 018a7de..ba12825 100644 |
490 | --- a/sound/pci/cs46xx/cs46xx_lib.h |
491 | +++ b/sound/pci/cs46xx/cs46xx_lib.h |
492 | @@ -35,7 +35,7 @@ |
493 | |
494 | |
495 | #ifdef CONFIG_SND_CS46XX_NEW_DSP |
496 | -#define CS46XX_MIN_PERIOD_SIZE 1 |
497 | +#define CS46XX_MIN_PERIOD_SIZE 64 |
498 | #define CS46XX_MAX_PERIOD_SIZE 1024*1024 |
499 | #else |
500 | #define CS46XX_MIN_PERIOD_SIZE 2048 |
501 | diff --git a/sound/pci/oxygen/oxygen_io.c b/sound/pci/oxygen/oxygen_io.c |
502 | index 83f135f..6ebd2f3 100644 |
503 | --- a/sound/pci/oxygen/oxygen_io.c |
504 | +++ b/sound/pci/oxygen/oxygen_io.c |
505 | @@ -214,17 +214,8 @@ EXPORT_SYMBOL(oxygen_write_spi); |
506 | |
507 | void oxygen_write_i2c(struct oxygen *chip, u8 device, u8 map, u8 data) |
508 | { |
509 | - unsigned long timeout; |
510 | - |
511 | /* should not need more than about 300 us */ |
512 | - timeout = jiffies + msecs_to_jiffies(1); |
513 | - do { |
514 | - if (!(oxygen_read16(chip, OXYGEN_2WIRE_BUS_STATUS) |
515 | - & OXYGEN_2WIRE_BUSY)) |
516 | - break; |
517 | - udelay(1); |
518 | - cond_resched(); |
519 | - } while (time_after_eq(timeout, jiffies)); |
520 | + msleep(1); |
521 | |
522 | oxygen_write8(chip, OXYGEN_2WIRE_MAP, map); |
523 | oxygen_write8(chip, OXYGEN_2WIRE_DATA, data); |