diff options
author | Paul Mackerras <paulus@samba.org> | 2008-01-23 18:07:21 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-01-23 18:07:21 -0500 |
commit | 9156ad48338e0306e508ead5c0d9986050744475 (patch) | |
tree | 37f3a90e38190052ecf3cdf9171dfdddd37b56fd /drivers/video/ps3fb.c | |
parent | fa28237cfcc5827553044cbd6ee52e33692b0faa (diff) | |
parent | 8f7b3d156d348b6766833cd4e272d0d19b501e64 (diff) |
Merge branch 'linux-2.6'
Diffstat (limited to 'drivers/video/ps3fb.c')
-rw-r--r-- | drivers/video/ps3fb.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/video/ps3fb.c b/drivers/video/ps3fb.c index b3128903d673..044a423a72cb 100644 --- a/drivers/video/ps3fb.c +++ b/drivers/video/ps3fb.c | |||
@@ -443,8 +443,6 @@ static int ps3fb_sync(struct fb_info *info, u32 frame) | |||
443 | u32 ddr_line_length, xdr_line_length; | 443 | u32 ddr_line_length, xdr_line_length; |
444 | u64 ddr_base, xdr_base; | 444 | u64 ddr_base, xdr_base; |
445 | 445 | ||
446 | acquire_console_sem(); | ||
447 | |||
448 | if (frame > par->num_frames - 1) { | 446 | if (frame > par->num_frames - 1) { |
449 | dev_dbg(info->device, "%s: invalid frame number (%u)\n", | 447 | dev_dbg(info->device, "%s: invalid frame number (%u)\n", |
450 | __func__, frame); | 448 | __func__, frame); |
@@ -464,7 +462,6 @@ static int ps3fb_sync(struct fb_info *info, u32 frame) | |||
464 | xdr_line_length); | 462 | xdr_line_length); |
465 | 463 | ||
466 | out: | 464 | out: |
467 | release_console_sem(); | ||
468 | return error; | 465 | return error; |
469 | } | 466 | } |
470 | 467 | ||
@@ -479,7 +476,10 @@ static int ps3fb_release(struct fb_info *info, int user) | |||
479 | if (atomic_dec_and_test(&ps3fb.f_count)) { | 476 | if (atomic_dec_and_test(&ps3fb.f_count)) { |
480 | if (atomic_read(&ps3fb.ext_flip)) { | 477 | if (atomic_read(&ps3fb.ext_flip)) { |
481 | atomic_set(&ps3fb.ext_flip, 0); | 478 | atomic_set(&ps3fb.ext_flip, 0); |
482 | ps3fb_sync(info, 0); /* single buffer */ | 479 | if (!try_acquire_console_sem()) { |
480 | ps3fb_sync(info, 0); /* single buffer */ | ||
481 | release_console_sem(); | ||
482 | } | ||
483 | } | 483 | } |
484 | } | 484 | } |
485 | return 0; | 485 | return 0; |
@@ -865,7 +865,9 @@ static int ps3fb_ioctl(struct fb_info *info, unsigned int cmd, | |||
865 | break; | 865 | break; |
866 | 866 | ||
867 | dev_dbg(info->device, "PS3FB_IOCTL_FSEL:%d\n", val); | 867 | dev_dbg(info->device, "PS3FB_IOCTL_FSEL:%d\n", val); |
868 | acquire_console_sem(); | ||
868 | retval = ps3fb_sync(info, val); | 869 | retval = ps3fb_sync(info, val); |
870 | release_console_sem(); | ||
869 | break; | 871 | break; |
870 | 872 | ||
871 | default: | 873 | default: |
@@ -885,7 +887,9 @@ static int ps3fbd(void *arg) | |||
885 | set_current_state(TASK_INTERRUPTIBLE); | 887 | set_current_state(TASK_INTERRUPTIBLE); |
886 | if (ps3fb.is_kicked) { | 888 | if (ps3fb.is_kicked) { |
887 | ps3fb.is_kicked = 0; | 889 | ps3fb.is_kicked = 0; |
890 | acquire_console_sem(); | ||
888 | ps3fb_sync(info, 0); /* single buffer */ | 891 | ps3fb_sync(info, 0); /* single buffer */ |
892 | release_console_sem(); | ||
889 | } | 893 | } |
890 | schedule(); | 894 | schedule(); |
891 | } | 895 | } |
@@ -1234,12 +1238,6 @@ static int ps3fb_shutdown(struct ps3_system_bus_device *dev) | |||
1234 | ps3fb_flip_ctl(0, &ps3fb); /* flip off */ | 1238 | ps3fb_flip_ctl(0, &ps3fb); /* flip off */ |
1235 | ps3fb.dinfo->irq.mask = 0; | 1239 | ps3fb.dinfo->irq.mask = 0; |
1236 | 1240 | ||
1237 | if (info) { | ||
1238 | unregister_framebuffer(info); | ||
1239 | fb_dealloc_cmap(&info->cmap); | ||
1240 | framebuffer_release(info); | ||
1241 | } | ||
1242 | |||
1243 | ps3av_register_flip_ctl(NULL, NULL); | 1241 | ps3av_register_flip_ctl(NULL, NULL); |
1244 | if (ps3fb.task) { | 1242 | if (ps3fb.task) { |
1245 | struct task_struct *task = ps3fb.task; | 1243 | struct task_struct *task = ps3fb.task; |
@@ -1250,6 +1248,12 @@ static int ps3fb_shutdown(struct ps3_system_bus_device *dev) | |||
1250 | free_irq(ps3fb.irq_no, &dev->core); | 1248 | free_irq(ps3fb.irq_no, &dev->core); |
1251 | ps3_irq_plug_destroy(ps3fb.irq_no); | 1249 | ps3_irq_plug_destroy(ps3fb.irq_no); |
1252 | } | 1250 | } |
1251 | if (info) { | ||
1252 | unregister_framebuffer(info); | ||
1253 | fb_dealloc_cmap(&info->cmap); | ||
1254 | framebuffer_release(info); | ||
1255 | info = dev->core.driver_data = NULL; | ||
1256 | } | ||
1253 | iounmap((u8 __iomem *)ps3fb.dinfo); | 1257 | iounmap((u8 __iomem *)ps3fb.dinfo); |
1254 | 1258 | ||
1255 | status = lv1_gpu_context_free(ps3fb.context_handle); | 1259 | status = lv1_gpu_context_free(ps3fb.context_handle); |