From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, saahriktu <mail@saahriktu.org>,
Ivan Mironov <mironov.ivan@gmail.com>,
Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: [PATCH 4.20 42/57] drm/fb-helper: Partially bring back workaround for bugs of SDL 1.2
Date: Tue, 15 Jan 2019 17:36:23 +0100 [thread overview]
Message-ID: <20190115154913.264566339@linuxfoundation.org> (raw)
In-Reply-To: <20190115154910.734892368@linuxfoundation.org>
4.20-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ivan Mironov <mironov.ivan@gmail.com>
commit 62d85b3bf9d978ed4b6b2aeef5cf0ccf1423906e upstream.
SDL 1.2 sets all fields related to the pixel format to zero in some
cases[1]. Prior to commit db05c48197759 ("drm: fb-helper: Reject all
pixel format changing requests"), there was an unintentional workaround
for this that existed for more than a decade. First in device-specific DRM
drivers, then here in drm_fb_helper.c.
Previous code containing this workaround just ignores pixel format fields
from userspace code. Not a good thing either, as this way, driver may
silently use pixel format different from what client actually requested,
and this in turn will lead to displaying garbage on the screen. I think
that returning EINVAL to userspace in this particular case is the right
option, so I decided to left code from problematic commit untouched
instead of just reverting it entirely.
Here is the steps required to reproduce this problem exactly:
1) Compile fceux[2] with SDL 1.2.15 and without GTK or OpenGL
support. SDL should be compiled with fbdev support (which is
on by default).
2) Create /etc/fb.modes with following contents (values seems
not used, and just required to trigger problematic code in
SDL):
mode "test"
geometry 1 1 1 1 1
timings 1 1 1 1 1 1 1
endmode
3) Create ~/.fceux/fceux.cfg with following contents:
SDL.Hotkeys.Quit = 27
SDL.DoubleBuffering = 1
4) Ensure that screen resolution is at least 1280x960 (e.g.
append "video=Virtual-1:1280x960-32" to the kernel cmdline
for qemu/QXL).
5) Try to run fceux on VT with some ROM file[3]:
# ./fceux color_test.nes
[1] SDL 1.2.15 source code, src/video/fbcon/SDL_fbvideo.c,
FB_SetVideoMode()
[2] http://www.fceux.com
[3] Example ROM: https://github.com/bokuweb/rustynes/blob/master/roms/color_test.nes
Reported-by: saahriktu <mail@saahriktu.org>
Suggested-by: saahriktu <mail@saahriktu.org>
Cc: stable@vger.kernel.org
Fixes: db05c48197759 ("drm: fb-helper: Reject all pixel format changing requests")
Signed-off-by: Ivan Mironov <mironov.ivan@gmail.com>
[danvet: Delete misleading comment.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20190108072353.28078-2-mironov.ivan@gmail.com
Link: https://patchwork.freedesktop.org/patch/msgid/20190108072353.28078-2-mironov.ivan@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/drm_fb_helper.c | 126 +++++++++++++++++++++++-----------------
1 file changed, 73 insertions(+), 53 deletions(-)
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -1621,6 +1621,64 @@ static bool drm_fb_pixel_format_equal(co
var_1->transp.msb_right == var_2->transp.msb_right;
}
+static void drm_fb_helper_fill_pixel_fmt(struct fb_var_screeninfo *var,
+ u8 depth)
+{
+ switch (depth) {
+ case 8:
+ var->red.offset = 0;
+ var->green.offset = 0;
+ var->blue.offset = 0;
+ var->red.length = 8; /* 8bit DAC */
+ var->green.length = 8;
+ var->blue.length = 8;
+ var->transp.offset = 0;
+ var->transp.length = 0;
+ break;
+ case 15:
+ var->red.offset = 10;
+ var->green.offset = 5;
+ var->blue.offset = 0;
+ var->red.length = 5;
+ var->green.length = 5;
+ var->blue.length = 5;
+ var->transp.offset = 15;
+ var->transp.length = 1;
+ break;
+ case 16:
+ var->red.offset = 11;
+ var->green.offset = 5;
+ var->blue.offset = 0;
+ var->red.length = 5;
+ var->green.length = 6;
+ var->blue.length = 5;
+ var->transp.offset = 0;
+ break;
+ case 24:
+ var->red.offset = 16;
+ var->green.offset = 8;
+ var->blue.offset = 0;
+ var->red.length = 8;
+ var->green.length = 8;
+ var->blue.length = 8;
+ var->transp.offset = 0;
+ var->transp.length = 0;
+ break;
+ case 32:
+ var->red.offset = 16;
+ var->green.offset = 8;
+ var->blue.offset = 0;
+ var->red.length = 8;
+ var->green.length = 8;
+ var->blue.length = 8;
+ var->transp.offset = 24;
+ var->transp.length = 8;
+ break;
+ default:
+ break;
+ }
+}
+
/**
* drm_fb_helper_check_var - implementation for &fb_ops.fb_check_var
* @var: screeninfo to check
@@ -1651,6 +1709,20 @@ int drm_fb_helper_check_var(struct fb_va
}
/*
+ * Workaround for SDL 1.2, which is known to be setting all pixel format
+ * fields values to zero in some cases. We treat this situation as a
+ * kind of "use some reasonable autodetected values".
+ */
+ if (!var->red.offset && !var->green.offset &&
+ !var->blue.offset && !var->transp.offset &&
+ !var->red.length && !var->green.length &&
+ !var->blue.length && !var->transp.length &&
+ !var->red.msb_right && !var->green.msb_right &&
+ !var->blue.msb_right && !var->transp.msb_right) {
+ drm_fb_helper_fill_pixel_fmt(var, fb->format->depth);
+ }
+
+ /*
* drm fbdev emulation doesn't support changing the pixel format at all,
* so reject all pixel format changing requests.
*/
@@ -1961,59 +2033,7 @@ void drm_fb_helper_fill_var(struct fb_in
info->var.yoffset = 0;
info->var.activate = FB_ACTIVATE_NOW;
- switch (fb->format->depth) {
- case 8:
- info->var.red.offset = 0;
- info->var.green.offset = 0;
- info->var.blue.offset = 0;
- info->var.red.length = 8; /* 8bit DAC */
- info->var.green.length = 8;
- info->var.blue.length = 8;
- info->var.transp.offset = 0;
- info->var.transp.length = 0;
- break;
- case 15:
- info->var.red.offset = 10;
- info->var.green.offset = 5;
- info->var.blue.offset = 0;
- info->var.red.length = 5;
- info->var.green.length = 5;
- info->var.blue.length = 5;
- info->var.transp.offset = 15;
- info->var.transp.length = 1;
- break;
- case 16:
- info->var.red.offset = 11;
- info->var.green.offset = 5;
- info->var.blue.offset = 0;
- info->var.red.length = 5;
- info->var.green.length = 6;
- info->var.blue.length = 5;
- info->var.transp.offset = 0;
- break;
- case 24:
- info->var.red.offset = 16;
- info->var.green.offset = 8;
- info->var.blue.offset = 0;
- info->var.red.length = 8;
- info->var.green.length = 8;
- info->var.blue.length = 8;
- info->var.transp.offset = 0;
- info->var.transp.length = 0;
- break;
- case 32:
- info->var.red.offset = 16;
- info->var.green.offset = 8;
- info->var.blue.offset = 0;
- info->var.red.length = 8;
- info->var.green.length = 8;
- info->var.blue.length = 8;
- info->var.transp.offset = 24;
- info->var.transp.length = 8;
- break;
- default:
- break;
- }
+ drm_fb_helper_fill_pixel_fmt(&info->var, fb->format->depth);
info->var.xres = fb_width;
info->var.yres = fb_height;
next prev parent reply other threads:[~2019-01-15 16:45 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-15 16:35 [PATCH 4.20 00/57] 4.20.3-stable review Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 01/57] powerpc/tm: Unset MSR[TS] if not recheckpointing Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 02/57] Btrfs: fix deadlock when using free space tree due to block group creation Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 03/57] usbcore: Select only first configuration for non-UAC3 compliant devices Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 04/57] staging: rtl8188eu: Fix module loading from tasklet for CCMP encryption Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 05/57] staging: rtl8188eu: Fix module loading from tasklet for WEP encryption Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 06/57] cpufreq: scpi/scmi: Fix freeing of dynamic OPPs Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 07/57] cpufreq: scmi: Fix frequency invariance in slow path Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 08/57] x86, modpost: Replace last remnants of RETPOLINE with CONFIG_RETPOLINE Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 09/57] ALSA: hda/realtek - Support Dell headset mode for New AIO platform Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 10/57] ALSA: hda/realtek - Add unplug function into unplug state of Headset Mode for ALC225 Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 11/57] ALSA: hda/realtek - Disable headset Mic VREF for headset mode of ALC225 Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 12/57] CIFS: Fix adjustment of credits for MTU requests Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 13/57] CIFS: Do not set credits to 1 if the server didnt grant anything Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 14/57] CIFS: Do not hide EINTR after sending network packets Greg Kroah-Hartman
2019-01-15 19:22 ` Pavel Shilovskiy
2019-01-16 6:37 ` Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 15/57] CIFS: Fix credit computation for compounded requests Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 16/57] cifs: Fix potential OOB access of lock element array Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 17/57] cifs: check kzalloc return Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.20 18/57] ARM: davinci: dm355-evm: fix label names in GPIO lookup entries Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 19/57] ARM: davinci: da850-evm: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 20/57] ARM: davinci: omapl138-hawk: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 21/57] ARM: davinci: dm644x-evm: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 22/57] ARM: davinci: da830-evm: " Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 23/57] usb: cdc-acm: send ZLP for Telit 3G Intel based modems Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 24/57] USB: storage: dont insert sane sense for SPC3+ when bad sense specified Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 25/57] USB: storage: add quirk for SMI SM3350 Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 26/57] USB: Add USB_QUIRK_DELAY_CTRL_MSG quirk for Corsair K70 RGB Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 27/57] fork, memcg: fix cached_stacks case Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 28/57] slab: alien caches must not be initialized if the allocation of the alien cache failed Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 29/57] mm/usercopy.c: no check page span for stack objects Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 30/57] mm, memcg: fix reclaim deadlock with writeback Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 31/57] ACPI: power: Skip duplicate power resource references in _PRx Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 32/57] ACPI / PMIC: xpower: Fix TS-pin current-source handling Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 33/57] ACPI/IORT: Fix rc_dma_get_range() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 34/57] i2c: dev: prevent adapter retries and timeout being set as minus value Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 35/57] mtd: rawnand: qcom: fix memory corruption that causes panic Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 36/57] vfio/type1: Fix unmap overflow off-by-one Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 37/57] drm/amdgpu: Add new VegaM pci id Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 38/57] PCI: dwc: Use interrupt masking instead of disabling Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 39/57] PCI: dwc: Take lock when ACKing an interrupt Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 40/57] PCI: dwc: Move interrupt acking into the proper callback Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 41/57] drm/amd/display: Fix MST dp_blank REG_WAIT timeout Greg Kroah-Hartman
2019-01-15 16:36 ` Greg Kroah-Hartman [this message]
2019-01-15 16:36 ` [PATCH 4.20 43/57] drm/i915: Unwind failure on pinning the gen7 ppgtt Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 44/57] drm/amdgpu: Dont ignore rc from drm_dp_mst_topology_mgr_resume() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 45/57] drm/amdgpu: Dont fail resume process if resuming atomic state fails Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 46/57] rbd: dont return 0 on unmap if RBD_DEV_FLAG_REMOVING is set Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 47/57] ext4: make sure enough credits are reserved for dioread_nolock writes Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 48/57] ext4: fix a potential fiemap/page fault deadlock w/ inline_data Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 49/57] ext4: avoid kernel warning when writing the superblock to a dead device Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 50/57] ext4: use ext4_write_inode() when fsyncing w/o a journal Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 51/57] ext4: track writeback errors using the generic tracking infrastructure Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 52/57] ext4: fix special inode number checks in __ext4_iget() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 53/57] mm: page_mapped: dont assume compound page is huge or THP Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 54/57] sunrpc: use-after-free in svc_process_common() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 55/57] Btrfs: fix access to available allocation bits when starting balance Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 56/57] Btrfs: fix deadlock when enabling quotas due to concurrent snapshot creation Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.20 57/57] Btrfs: use nofs context when initializing security xattrs to avoid deadlock Greg Kroah-Hartman
2019-01-16 2:00 ` [PATCH 4.20 00/57] 4.20.3-stable review shuah
2019-01-16 6:56 ` Greg Kroah-Hartman
2019-01-16 11:47 ` Naresh Kamboju
2019-01-16 16:13 ` Greg Kroah-Hartman
2019-01-16 20:38 ` Guenter Roeck
2019-01-16 21:45 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190115154913.264566339@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=daniel.vetter@ffwll.ch \
--cc=linux-kernel@vger.kernel.org \
--cc=mail@saahriktu.org \
--cc=mironov.ivan@gmail.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome