diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-08-16 13:42:58 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-08-16 13:42:58 -0400 |
commit | e4862f2f6f5653dfb67f3ba2b6f0bc74516ed51a (patch) | |
tree | 1db5a0540a4eecfad9b7daee476b985e82ddc810 /drivers/block/paride | |
parent | ec62dbd7eb8e3dddb221da89ecbcea0fc3dee8c1 (diff) | |
parent | b2c1e07b81a126e5846dfc3d36f559d861df59f4 (diff) |
Merge branch 'for-2.6.36' into for-2.6.37
Fairly simple conflicts, the most serious ones are the i.MX ones which I
suspect now need another rename.
Conflicts:
arch/arm/mach-mx2/clock_imx27.c
arch/arm/mach-mx2/devices.c
arch/arm/mach-omap2/board-rx51-peripherals.c
arch/arm/mach-omap2/board-zoom2.c
sound/soc/fsl/mpc5200_dma.c
sound/soc/fsl/mpc5200_dma.h
sound/soc/fsl/mpc8610_hpcd.c
sound/soc/pxa/spitz.c
Diffstat (limited to 'drivers/block/paride')
-rw-r--r-- | drivers/block/paride/pcd.c | 21 | ||||
-rw-r--r-- | drivers/block/paride/pd.c | 11 | ||||
-rw-r--r-- | drivers/block/paride/pf.c | 26 |
3 files changed, 47 insertions, 11 deletions
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c index 71acf4e53356..76f8565e1e8d 100644 --- a/drivers/block/paride/pcd.c +++ b/drivers/block/paride/pcd.c | |||
@@ -138,6 +138,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_DLY}; | |||
138 | #include <linux/cdrom.h> | 138 | #include <linux/cdrom.h> |
139 | #include <linux/spinlock.h> | 139 | #include <linux/spinlock.h> |
140 | #include <linux/blkdev.h> | 140 | #include <linux/blkdev.h> |
141 | #include <linux/smp_lock.h> | ||
141 | #include <asm/uaccess.h> | 142 | #include <asm/uaccess.h> |
142 | 143 | ||
143 | static DEFINE_SPINLOCK(pcd_lock); | 144 | static DEFINE_SPINLOCK(pcd_lock); |
@@ -224,13 +225,21 @@ static char *pcd_buf; /* buffer for request in progress */ | |||
224 | static int pcd_block_open(struct block_device *bdev, fmode_t mode) | 225 | static int pcd_block_open(struct block_device *bdev, fmode_t mode) |
225 | { | 226 | { |
226 | struct pcd_unit *cd = bdev->bd_disk->private_data; | 227 | struct pcd_unit *cd = bdev->bd_disk->private_data; |
227 | return cdrom_open(&cd->info, bdev, mode); | 228 | int ret; |
229 | |||
230 | lock_kernel(); | ||
231 | ret = cdrom_open(&cd->info, bdev, mode); | ||
232 | unlock_kernel(); | ||
233 | |||
234 | return ret; | ||
228 | } | 235 | } |
229 | 236 | ||
230 | static int pcd_block_release(struct gendisk *disk, fmode_t mode) | 237 | static int pcd_block_release(struct gendisk *disk, fmode_t mode) |
231 | { | 238 | { |
232 | struct pcd_unit *cd = disk->private_data; | 239 | struct pcd_unit *cd = disk->private_data; |
240 | lock_kernel(); | ||
233 | cdrom_release(&cd->info, mode); | 241 | cdrom_release(&cd->info, mode); |
242 | unlock_kernel(); | ||
234 | return 0; | 243 | return 0; |
235 | } | 244 | } |
236 | 245 | ||
@@ -238,7 +247,13 @@ static int pcd_block_ioctl(struct block_device *bdev, fmode_t mode, | |||
238 | unsigned cmd, unsigned long arg) | 247 | unsigned cmd, unsigned long arg) |
239 | { | 248 | { |
240 | struct pcd_unit *cd = bdev->bd_disk->private_data; | 249 | struct pcd_unit *cd = bdev->bd_disk->private_data; |
241 | return cdrom_ioctl(&cd->info, bdev, mode, cmd, arg); | 250 | int ret; |
251 | |||
252 | lock_kernel(); | ||
253 | ret = cdrom_ioctl(&cd->info, bdev, mode, cmd, arg); | ||
254 | unlock_kernel(); | ||
255 | |||
256 | return ret; | ||
242 | } | 257 | } |
243 | 258 | ||
244 | static int pcd_block_media_changed(struct gendisk *disk) | 259 | static int pcd_block_media_changed(struct gendisk *disk) |
@@ -251,7 +266,7 @@ static const struct block_device_operations pcd_bdops = { | |||
251 | .owner = THIS_MODULE, | 266 | .owner = THIS_MODULE, |
252 | .open = pcd_block_open, | 267 | .open = pcd_block_open, |
253 | .release = pcd_block_release, | 268 | .release = pcd_block_release, |
254 | .locked_ioctl = pcd_block_ioctl, | 269 | .ioctl = pcd_block_ioctl, |
255 | .media_changed = pcd_block_media_changed, | 270 | .media_changed = pcd_block_media_changed, |
256 | }; | 271 | }; |
257 | 272 | ||
diff --git a/drivers/block/paride/pd.c b/drivers/block/paride/pd.c index c1e5cd029b23..985f0d4f1d1e 100644 --- a/drivers/block/paride/pd.c +++ b/drivers/block/paride/pd.c | |||
@@ -153,6 +153,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_GEO, D_SBY, D_DLY, D_SLV}; | |||
153 | #include <linux/blkdev.h> | 153 | #include <linux/blkdev.h> |
154 | #include <linux/blkpg.h> | 154 | #include <linux/blkpg.h> |
155 | #include <linux/kernel.h> | 155 | #include <linux/kernel.h> |
156 | #include <linux/smp_lock.h> | ||
156 | #include <asm/uaccess.h> | 157 | #include <asm/uaccess.h> |
157 | #include <linux/workqueue.h> | 158 | #include <linux/workqueue.h> |
158 | 159 | ||
@@ -439,7 +440,7 @@ static char *pd_buf; /* buffer for request in progress */ | |||
439 | 440 | ||
440 | static enum action do_pd_io_start(void) | 441 | static enum action do_pd_io_start(void) |
441 | { | 442 | { |
442 | if (blk_special_request(pd_req)) { | 443 | if (pd_req->cmd_type == REQ_TYPE_SPECIAL) { |
443 | phase = pd_special; | 444 | phase = pd_special; |
444 | return pd_special(); | 445 | return pd_special(); |
445 | } | 446 | } |
@@ -735,12 +736,14 @@ static int pd_open(struct block_device *bdev, fmode_t mode) | |||
735 | { | 736 | { |
736 | struct pd_unit *disk = bdev->bd_disk->private_data; | 737 | struct pd_unit *disk = bdev->bd_disk->private_data; |
737 | 738 | ||
739 | lock_kernel(); | ||
738 | disk->access++; | 740 | disk->access++; |
739 | 741 | ||
740 | if (disk->removable) { | 742 | if (disk->removable) { |
741 | pd_special_command(disk, pd_media_check); | 743 | pd_special_command(disk, pd_media_check); |
742 | pd_special_command(disk, pd_door_lock); | 744 | pd_special_command(disk, pd_door_lock); |
743 | } | 745 | } |
746 | unlock_kernel(); | ||
744 | return 0; | 747 | return 0; |
745 | } | 748 | } |
746 | 749 | ||
@@ -768,8 +771,10 @@ static int pd_ioctl(struct block_device *bdev, fmode_t mode, | |||
768 | 771 | ||
769 | switch (cmd) { | 772 | switch (cmd) { |
770 | case CDROMEJECT: | 773 | case CDROMEJECT: |
774 | lock_kernel(); | ||
771 | if (disk->access == 1) | 775 | if (disk->access == 1) |
772 | pd_special_command(disk, pd_eject); | 776 | pd_special_command(disk, pd_eject); |
777 | unlock_kernel(); | ||
773 | return 0; | 778 | return 0; |
774 | default: | 779 | default: |
775 | return -EINVAL; | 780 | return -EINVAL; |
@@ -780,8 +785,10 @@ static int pd_release(struct gendisk *p, fmode_t mode) | |||
780 | { | 785 | { |
781 | struct pd_unit *disk = p->private_data; | 786 | struct pd_unit *disk = p->private_data; |
782 | 787 | ||
788 | lock_kernel(); | ||
783 | if (!--disk->access && disk->removable) | 789 | if (!--disk->access && disk->removable) |
784 | pd_special_command(disk, pd_door_unlock); | 790 | pd_special_command(disk, pd_door_unlock); |
791 | unlock_kernel(); | ||
785 | 792 | ||
786 | return 0; | 793 | return 0; |
787 | } | 794 | } |
@@ -812,7 +819,7 @@ static const struct block_device_operations pd_fops = { | |||
812 | .owner = THIS_MODULE, | 819 | .owner = THIS_MODULE, |
813 | .open = pd_open, | 820 | .open = pd_open, |
814 | .release = pd_release, | 821 | .release = pd_release, |
815 | .locked_ioctl = pd_ioctl, | 822 | .ioctl = pd_ioctl, |
816 | .getgeo = pd_getgeo, | 823 | .getgeo = pd_getgeo, |
817 | .media_changed = pd_check_media, | 824 | .media_changed = pd_check_media, |
818 | .revalidate_disk= pd_revalidate | 825 | .revalidate_disk= pd_revalidate |
diff --git a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c index c059aab3006b..4457b494882a 100644 --- a/drivers/block/paride/pf.c +++ b/drivers/block/paride/pf.c | |||
@@ -152,6 +152,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_LUN, D_DLY}; | |||
152 | #include <linux/spinlock.h> | 152 | #include <linux/spinlock.h> |
153 | #include <linux/blkdev.h> | 153 | #include <linux/blkdev.h> |
154 | #include <linux/blkpg.h> | 154 | #include <linux/blkpg.h> |
155 | #include <linux/smp_lock.h> | ||
155 | #include <asm/uaccess.h> | 156 | #include <asm/uaccess.h> |
156 | 157 | ||
157 | static DEFINE_SPINLOCK(pf_spin_lock); | 158 | static DEFINE_SPINLOCK(pf_spin_lock); |
@@ -266,7 +267,7 @@ static const struct block_device_operations pf_fops = { | |||
266 | .owner = THIS_MODULE, | 267 | .owner = THIS_MODULE, |
267 | .open = pf_open, | 268 | .open = pf_open, |
268 | .release = pf_release, | 269 | .release = pf_release, |
269 | .locked_ioctl = pf_ioctl, | 270 | .ioctl = pf_ioctl, |
270 | .getgeo = pf_getgeo, | 271 | .getgeo = pf_getgeo, |
271 | .media_changed = pf_check_media, | 272 | .media_changed = pf_check_media, |
272 | }; | 273 | }; |
@@ -299,20 +300,26 @@ static void __init pf_init_units(void) | |||
299 | static int pf_open(struct block_device *bdev, fmode_t mode) | 300 | static int pf_open(struct block_device *bdev, fmode_t mode) |
300 | { | 301 | { |
301 | struct pf_unit *pf = bdev->bd_disk->private_data; | 302 | struct pf_unit *pf = bdev->bd_disk->private_data; |
303 | int ret; | ||
302 | 304 | ||
305 | lock_kernel(); | ||
303 | pf_identify(pf); | 306 | pf_identify(pf); |
304 | 307 | ||
308 | ret = -ENODEV; | ||
305 | if (pf->media_status == PF_NM) | 309 | if (pf->media_status == PF_NM) |
306 | return -ENODEV; | 310 | goto out; |
307 | 311 | ||
312 | ret = -EROFS; | ||
308 | if ((pf->media_status == PF_RO) && (mode & FMODE_WRITE)) | 313 | if ((pf->media_status == PF_RO) && (mode & FMODE_WRITE)) |
309 | return -EROFS; | 314 | goto out; |
310 | 315 | ||
316 | ret = 0; | ||
311 | pf->access++; | 317 | pf->access++; |
312 | if (pf->removable) | 318 | if (pf->removable) |
313 | pf_lock(pf, 1); | 319 | pf_lock(pf, 1); |
314 | 320 | out: | |
315 | return 0; | 321 | unlock_kernel(); |
322 | return ret; | ||
316 | } | 323 | } |
317 | 324 | ||
318 | static int pf_getgeo(struct block_device *bdev, struct hd_geometry *geo) | 325 | static int pf_getgeo(struct block_device *bdev, struct hd_geometry *geo) |
@@ -342,7 +349,10 @@ static int pf_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, u | |||
342 | 349 | ||
343 | if (pf->access != 1) | 350 | if (pf->access != 1) |
344 | return -EBUSY; | 351 | return -EBUSY; |
352 | lock_kernel(); | ||
345 | pf_eject(pf); | 353 | pf_eject(pf); |
354 | unlock_kernel(); | ||
355 | |||
346 | return 0; | 356 | return 0; |
347 | } | 357 | } |
348 | 358 | ||
@@ -350,14 +360,18 @@ static int pf_release(struct gendisk *disk, fmode_t mode) | |||
350 | { | 360 | { |
351 | struct pf_unit *pf = disk->private_data; | 361 | struct pf_unit *pf = disk->private_data; |
352 | 362 | ||
353 | if (pf->access <= 0) | 363 | lock_kernel(); |
364 | if (pf->access <= 0) { | ||
365 | unlock_kernel(); | ||
354 | return -EINVAL; | 366 | return -EINVAL; |
367 | } | ||
355 | 368 | ||
356 | pf->access--; | 369 | pf->access--; |
357 | 370 | ||
358 | if (!pf->access && pf->removable) | 371 | if (!pf->access && pf->removable) |
359 | pf_lock(pf, 0); | 372 | pf_lock(pf, 0); |
360 | 373 | ||
374 | unlock_kernel(); | ||
361 | return 0; | 375 | return 0; |
362 | 376 | ||
363 | } | 377 | } |