aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
Commit message (Collapse)AuthorAge
* Merge branch 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-blockLinus Torvalds2007-10-16
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block: (63 commits) Fix memory leak in dm-crypt SPARC64: sg chaining support SPARC: sg chaining support PPC: sg chaining support PS3: sg chaining support IA64: sg chaining support x86-64: enable sg chaining x86-64: update pci-gart iommu to sg helpers x86-64: update nommu to sg helpers x86-64: update calgary iommu to sg helpers swiotlb: sg chaining support i386: enable sg chaining i386 dma_map_sg: convert to using sg helpers mmc: need to zero sglist on init Panic in blk_rq_map_sg() from CCISS driver remove sglist_len remove blk_queue_max_phys_segments in libata revert sg segment size ifdefs Fixup u14-34f ENABLE_SG_CHAINING qla1280: enable use_sg_chaining option ...
| * Fix memory leak in dm-cryptNeil Brown2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | dm-crypt used the ->bi_size member in the bio endio handling to free the appropriate pages, but it frees all of it from both call paths. With the ->bi_end_io() changes, ->bi_size was always 0 since we don't do partial completes. This caused dm-crypt to leak memory. Fix this by removing the size argument from crypt_free_buffer_pages(). Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| * Merge branch 'sglist-arch' into for-linusJens Axboe2007-10-16
| |\
| | * mmc: need to zero sglist on initJens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | Otherwise we could have junk in the sg fields, fooling the sg chaining into thinking ->page is valid. Acked-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * Panic in blk_rq_map_sg() from CCISS driverLee Schermerhorn2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | New scatter/gather list chaining [sg_next()] treats 'page' member of struct scatterlist with low bit set [0x01] as a chain pointer to another struct scatterlist [array]. The CCISS driver request function passes an uninitialized, temporary, on-stack scatterlist array to blk_rq_map_sq(). sg_next() interprets random data on the stack as a chain pointer and eventually tries to de-reference an invalid pointer, resulting in: [<ffffffff8031dd70>] blk_rq_map_sg+0x70/0x170 PGD 6090c3067 PUD 0 Oops: 0000 [1] SMP last sysfs file: /block/cciss!c0d0/cciss!c0d0p1/dev CPU 6 Modules linked in: ehci_hcd ohci_hcd uhci_hcd Pid: 1, comm: init Not tainted 2.6.23-rc6-mm1 #3 RIP: 0010:[<ffffffff8031dd70>] [<ffffffff8031dd70>] blk_rq_map_sg+0x70/0x170 RSP: 0018:ffff81060901f768 EFLAGS: 00010206 RAX: 000000040b161000 RBX: ffff81060901f7d8 RCX: 000000040b162c00 RDX: 0000000000000000 RSI: ffff81060b13a260 RDI: ffff81060b139600 RBP: 0000000000001400 R08: 00000000fffffffe R09: 0000000000000400 R10: 0000000000000000 R11: 000000040b163000 R12: ffff810102fe0000 R13: 0000000000000001 R14: 0000000000000001 R15: 00001e0000000000 FS: 00000000026108f0(0063) GS:ffff810409000b80(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 000000010000001e CR3: 00000006090c6000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process init (pid: 1, threadinfo ffff81060901e000, task ffff810409020800) last branch before last exception/interrupt from [<ffffffff8031de0a>] blk_rq_map_sg+0x10a/0x170 to [<ffffffff8031dd70>] blk_rq_map_sg+0x70/0x170 Stack: 000000018068ea00 ffff810102fe0000 0000000000000000 ffff810011400000 0000000000000002 0000000000000000 ffff81040b172000 ffffffff803acd3d 0000000000003ec1 ffff8106090d5000 ffff8106090d5000 ffff810102fe0000 Call Trace: [<ffffffff803acd3d>] do_cciss_request+0x15d/0x4c0 [<ffffffff80298968>] new_slab+0x1c8/0x270 [<ffffffff80298ffd>] __slab_alloc+0x22d/0x470 [<ffffffff8027327b>] mempool_alloc+0x4b/0x130 [<ffffffff8032b21e>] cfq_set_request+0xee/0x380 [<ffffffff8027327b>] mempool_alloc+0x4b/0x130 [<ffffffff8031ff98>] get_request+0x168/0x360 [<ffffffff80331b0d>] rb_insert_color+0x8d/0x110 [<ffffffff8031cfd8>] elv_rb_add+0x58/0x60 [<ffffffff8032a329>] cfq_add_rq_rb+0x69/0xa0 [<ffffffff8031c1ab>] elv_merged_request+0x5b/0x60 [<ffffffff803224fd>] __make_request+0x23d/0x650 [<ffffffff80298ffd>] __slab_alloc+0x22d/0x470 [<ffffffff80270000>] generic_write_checks+0x140/0x190 [<ffffffff8031f012>] generic_make_request+0x1c2/0x3a0 <etc> Kernel panic - not syncing: Attempted to kill init! This patch initializes the tmp_sg array to zeroes. Perhaps not the ultimate fix, but an effective work-around. I can now boot 23-rc6-mm1 on an HP Proliant x86_64 with CCISS boot disk. Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com> drivers/block/cciss.c | 1 + 1 file changed, 1 insertion(+) Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * remove sglist_lenFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * remove blk_queue_max_phys_segments in libataFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LIBATA_MAX_PRD is the maximum number of DMA scatter/gather elements permitted by the HBA's DMA engine. It's properly set to q->max_hw_segments via the sg_tablesize parameter. libata shouldn't call blk_queue_max_phys_segments. Now LIBATA_MAX_PRD is equal to SCSI_MAX_PHYS_SEGMENTS by default (both is 128), so everything is fine. But if they are changed, some code (like the scsi mid layer, sg chaining, etc) might not work properly. (Addition from Jens) The basic issue is that the physical segment setting is purely a driver issue. And since SCSI is managing the sglist, libata has no business changing the setting. All libata should care about is the hw segment setting. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * revert sg segment size ifdefsFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | This reverts sg segment size ifdefs that the current code has in order to provide a way to reduce sgpool memory consumption. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * Fixup u14-34f ENABLE_SG_CHAININGAndrew Morton2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * qla1280: enable use_sg_chaining optionFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * [SCSI] add use_sg_chaining option to scsi_host_templateFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This option is true if a low-level driver can support sg chaining. This will be removed eventually when all the drivers are converted to support sg chaining. q->max_phys_segments is set to SCSI_MAX_SG_SEGMENTS if false. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * qla1280: sg chaining fixesFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * libata sg chaining support fixFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * zfcp: sg chaining supportFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * ips: sg chaining supportFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | ips properly uses scsi_for_each_sg for the normal I/O path, however, the breakup path doesn't. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * IDE: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | | | | Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * Fusion: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * USB storage: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [PATCH] USB storage: sg chaining support Modify usb_stor_access_xfer_buf() to take a pointer to an sg entry pointer, so we can keep track of that instead of passing around an integer index (which we can't use when dealing with multiple scatterlist arrays). Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * infiniband: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * aha1542: convert to use the data buffer accessorsJens Axboe2007-10-16
| | | | | | | | | | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * ide-scsi: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | | | | Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * qlogicpti: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * aic94xx: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * qla1280: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | Interesting hardware setup... Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * scsi generic: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * scsi_debug: support sg chainingJens Axboe2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: Douglas Gilbert <dougg@torque.net> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * libata: convert to using sg helpersJens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | | | | This converts libata to using the sg helpers for looking up sg elements, instead of doing it manually. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * SCSI: support for allocating large scatterlistsJens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is what enables large commands. If we need to allocate an sgtable that doesn't fit in a single page, allocate several SCSI_MAX_SG_SEGMENTS sized tables and chain them together. SCSI defaults to large chained sg tables, if the arch supports it. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * scsi: simplify scsi_free_sgtable()Jens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | | | | Just pass in the command, no point in passing in the scatterlist and scatterlist pool index seperately. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * scsi: convert to using sg helpersJens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | | | | This converts the SCSI mid layer to using the sg helpers for looking up sg elements, instead of doing it manually. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| * | Merge branch 'barrier' into for-linusJens Axboe2007-10-16
| |\|
| | * pktcdvd: don't rely on bio_init() preserving bio->bi_destructorLaurent Riffard2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: Laurent Riffard <laurent.riffard@free.fr> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * pktcdvd: don't rely on bio_init() preserving bio->bi_io_vecJens Axboe2007-10-16
| | | | | | | | | | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * remove ide_get_error_location()Adrian Bunk2007-10-16
| | | | | | | | | | | | | | | Signed-off-by: Adrian Bunk <bunk@kernel.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| | * block: convert blkdev_issue_flush() to use empty barriersJens Axboe2007-10-16
| | | | | | | | | | | | | | | | | | | | | Then we can get rid of ->issue_flush_fn() and all the driver private implementations of that. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| * | drivers/block/cpqarray,cciss: kill unused varJeff Garzik2007-10-16
| |/ | | | | | | | | | | | | The recent bio work and subsequent fixups created unused variables. Signed-off-by: Jeff Garzik <jgarzik@redhat.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* | scsi_mac.h: Define AUTOSENSE before include of NCR5380.hBoaz Harrosh2007-10-16
| | | | | | | | | | | | | | | | | | - Previese patch to NCR5380 broke scsi_mac because AUTOSENSE was defined after the inclusion of NCR5380.h. Fix it Signed-off-by: Boaz Harrosh <bharrosh@panasas.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | tgafb: remove a redundant non-mono test in mono imageblitMaciej W. Rozycki2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a test in tgafb_mono_imageblit() for a colour image with a fall-back to cfb_imageblit(). The test is not necessary as the only caller, which is tgafb_imageblit(), checks it too and only invokes this function for monochrome images. It looks like a left-over from before some changes to tgafb_imageblit(). Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: Antonino Daplas <adaplas@pol.net> Cc: Jay Estabrook <Jay.Estabrook@hp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | tgafb: fix an out-of-range shift in mono imageblitMaciej W. Rozycki2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The pixel mask calculation in tgafb_mono_imageblit() uses a variable left-shift on a 32-bit data type by up to 32. Shifting by the width of a data type or more produces an unpredictable result according to the C standard. Rather than widening the data type this fix makes sure the count is between 0 and 31. The reason is not to penalise 32-bit platforms with operation on a "long long" type for a marginal case that is meant not to happen (blitting an image of a zero width). The reason it has escaped for so long is the Alpha, being purely 64-bit, :-) does not mask the shift out to 32 bits. This is a valid implementation -- producing the correct result certainly falls within "unpredictable behaviour". It does trigger on MIPS though and it is the recent merge of the TC support which only enabled the driver for use on anything other than the Alpha. For MIPS when the width is 32 the mask ends up being 0 rather than 0xffffffff as it should be and the frame buffer is not updated. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: Antonino Daplas <adaplas@pol.net> Cc: Jay Estabrook <Jay.Estabrook@hp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | fbcon: delay the start of the cursor timer until a con_switch()Antonino Daplas2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As reported in Bugzilla Bug 9093, upon switching to X, a small rectangular cursor can still be seen blinking in the upper left part of the screen. It is fbcon's text cursor. This is caused by a strange ioctl(..., KDSETMODE, KD_TEXT) call done by something in userspace, perhaps by X itself, while the tty is still in graphics mode. And when the tty is in KD_TEXT mode, the cursor timer is restarted. Although this is a userspace problem, we can work around it by delaying the restart of the cursor timer until an fbcon_switch() is called. In other words, the cursor timer will not be restarted even if a KD_TEXT mode switch is requested. Regression potential: Present but low Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | fbdev: copyarea function taught to fully support swapped pixel order in bytePavel Pisa2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This correct case, when source and destination X coordinates difference is n multiple of pixels in byte. This is probably rare case, but this case should supported for completeness. Reorganization of FB_READL and FB_WRITEL calls results in code size decrease for normal build without swapping support and size with support enabled is reasonable too. [adaplas] Add missing fb_rev_pixels_in_long() prototype. Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz> Signed-off-by: Antonino Daplas <adaplas@gmail.com> [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | s3fb: do not allow incorrect pixclock settingsKrzysztof Helt2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds check if selected pixclock is valid (is in the PLL range). Previously, if the pixclock could not be set, the new mode resolution was set but pixclock was not set which led to incorrect timings sent to monitor. [adaplas] Fixed a few misplaced curly braces. Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | svgalib: mode selection updatesOndrej Zajicek2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch changes mode selection matching algorithm. It allows to choose mode with matching depth even when requested color lengths are greater than color lengths of every mode with requested color depth. It also fixes bug in s3fb - wrong error value returned when format is not supported by chip. Signed-off-by: Ondrej Zajicek <santiago@crfreenet.org> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | ps3fb: default to 480p on DVI-D/HDMI if video=safeGeert Uytterhoeven2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | Default to the 480p video mode on DVI-D and HDMI displays if `video=safe' is passed on the kernel command line. This is intended to be used by `kboot'-style boot loaders (i.e. first-stage kernels) for the PS3, to provide a failsafe video mode. Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | fb: move and rename extern declaration for global_mode_optionGeert Uytterhoeven2007-10-16
| | | | | | | | | | | | | | | | | | | | Move the extern declaration for global_mode_option to <linux/fb.h> and rename the variable to fb_mode_option. Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | ps3fb: enhance horizontal panning on firmware 1.90 and upGeert Uytterhoeven2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ps3fb: Enhance horizontal panning on firmware 1.90 and up: - On firmware 1.90 and up, L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT supports copying rectangles from XDR to DDR memory with different source and destination line lengths. Hence larger horizontal virtual resolutions can be supported (up to 16368 pixels). - As the actual frame buffer memory layout no longer matches the entries in ps3fb_res[], create fake struct ps3fb_ioctl_res data for the PS3FB_IOCTL_SCREENINFO ioctl, so user space applications that depend on it keep on working. Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | ps3fb: add virtual screen and panning supportGeert Uytterhoeven2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ps3fb: Add virtual screen and panning support: - The vertical virtual screen size is limited by the amount of memory reserved for ps3fb, - The horizontal virtual screen size is limited to the fullscreen width, - Advertise that we support panning, so fbcon will use it if the virtual screen is enabled. Enabling a virtual screen (using `fbset -vyres nnn') can speed up text console scrolling by a factor of 10-15, depending on the video mode. Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | ps3fb: don't keep the borders for non-fullscreen modes in XDR memoryGeert Uytterhoeven2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't keep the borders for non-fullscreen modes in XDR memory: - Extract ps3fb_sync_image() - Work around the alignment restrictions of L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT by using an offset with L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_FLIP - Only copy the visible part of the screen on every vblank - Always put the real frame buffer at the start of video memory - Clear fullscreen DDR memory on mode change Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | ps3fb: use fb_info.par properlyGeert Uytterhoeven2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ps3fb: Use fb_info.par properly: o Move mode-specific fields into struct ps3fb_par o Allocate struct ps3fb_par using framebuffer_alloc() o Protect access to ps3fb_par in ps3fb_sync() using the console semaphore (this semaphore is already held when ps3fb_set_par() is called) o Avoid calling ps3av_set_video_mode() if the actual video mode hasn't changed Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | ps3fb: fix possible overlap of GPU command buffer and frame bufferGeert Uytterhoeven2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ps3fb: In the case of non-fullscreen video modes, there was a partial overlap of the GPU command buffer and the frame buffer. Fix and cleanup various issues with overlap and alignment: - Move the GPU command buffer from the beginning to the end of video memory - Exclude the GPU command buffer from the actual frame buffer memory - Align the start of the virtual frame buffer to PAGE_SIZE instead of to 64 KiB, and don't waste memory if it's already aligned (for fullscreen modes) - Take into account the alignment when checking memory requirements and maximum number of frames - Make sure fb_fix_screeninfo.smem_start always points to the virtual frame buffer start, so we don't have to compensate for that in ps3fb_mmap() Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>