Skip to content

Commit ca457ab

Browse files
committed
Merge tag 'drm-misc-next-fixes-2020-08-05' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next-fixes for v5.9-rc1: - Fix drm_dp_mst_port refcount leaks in drm_dp_mst_allocate_vcpi - Fix a fbcon OOB read in fbdev, found by syzbot. - Mark vga_tryget static as it's not used elsewhere. - Small fixes to xlnx. - Remove null check for kfree in drm_dev_release. - Fix DRM_FORMAT_MOD_AMLOGIC_FBC definition. - Fix mode initialization in omap_connector_mode_valid(). Signed-off-by: Dave Airlie <[email protected]> From: Maarten Lankhorst <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents dc100bc + a34a0a6 commit ca457ab

File tree

11 files changed

+33
-42
lines changed

11 files changed

+33
-42
lines changed

drivers/gpu/drm/drm_dp_mst_topology.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4308,11 +4308,11 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
43084308
{
43094309
int ret;
43104310

4311-
port = drm_dp_mst_topology_get_port_validated(mgr, port);
4312-
if (!port)
4311+
if (slots < 0)
43134312
return false;
43144313

4315-
if (slots < 0)
4314+
port = drm_dp_mst_topology_get_port_validated(mgr, port);
4315+
if (!port)
43164316
return false;
43174317

43184318
if (port->vcpi.vcpi > 0) {
@@ -4328,6 +4328,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
43284328
if (ret) {
43294329
DRM_DEBUG_KMS("failed to init vcpi slots=%d max=63 ret=%d\n",
43304330
DIV_ROUND_UP(pbn, mgr->pbn_div), ret);
4331+
drm_dp_mst_topology_put_port(port);
43314332
goto out;
43324333
}
43334334
DRM_DEBUG_KMS("initing vcpi for pbn=%d slots=%d\n",

drivers/gpu/drm/drm_drv.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -815,8 +815,7 @@ static void drm_dev_release(struct kref *ref)
815815

816816
drm_managed_release(dev);
817817

818-
if (dev->managed.final_kfree)
819-
kfree(dev->managed.final_kfree);
818+
kfree(dev->managed.final_kfree);
820819
}
821820

822821
/**

drivers/gpu/drm/omapdrm/omap_connector.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ static enum drm_mode_status omap_connector_mode_valid(struct drm_connector *conn
8989
struct drm_display_mode *mode)
9090
{
9191
struct omap_connector *omap_connector = to_omap_connector(connector);
92-
struct drm_display_mode new_mode = { { 0 } };
92+
struct drm_display_mode new_mode = {};
9393
enum drm_mode_status status;
9494

9595
status = omap_connector_mode_fixup(omap_connector->output, mode,

drivers/gpu/drm/xlnx/zynqmp_dp.c

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ MODULE_PARM_DESC(aux_timeout_ms, "DP aux timeout value in msec (default: 50)");
4444
*/
4545
static uint zynqmp_dp_power_on_delay_ms = 4;
4646
module_param_named(power_on_delay_ms, zynqmp_dp_power_on_delay_ms, uint, 0444);
47-
MODULE_PARM_DESC(aux_timeout_ms, "DP power on delay in msec (default: 4)");
47+
MODULE_PARM_DESC(power_on_delay_ms, "DP power on delay in msec (default: 4)");
4848

4949
/* Link configuration registers */
5050
#define ZYNQMP_DP_LINK_BW_SET 0x0
@@ -567,34 +567,37 @@ static int zynqmp_dp_mode_configure(struct zynqmp_dp *dp, int pclock,
567567
u8 current_bw)
568568
{
569569
int max_rate = dp->link_config.max_rate;
570-
u8 bws[3] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7, DP_LINK_BW_5_4 };
570+
u8 bw_code;
571571
u8 max_lanes = dp->link_config.max_lanes;
572572
u8 max_link_rate_code = drm_dp_link_rate_to_bw_code(max_rate);
573573
u8 bpp = dp->config.bpp;
574574
u8 lane_cnt;
575-
s8 i;
576575

577-
if (current_bw == DP_LINK_BW_1_62) {
576+
/* Downshift from current bandwidth */
577+
switch (current_bw) {
578+
case DP_LINK_BW_5_4:
579+
bw_code = DP_LINK_BW_2_7;
580+
break;
581+
case DP_LINK_BW_2_7:
582+
bw_code = DP_LINK_BW_1_62;
583+
break;
584+
case DP_LINK_BW_1_62:
578585
dev_err(dp->dev, "can't downshift. already lowest link rate\n");
579586
return -EINVAL;
580-
}
581-
582-
for (i = ARRAY_SIZE(bws) - 1; i >= 0; i--) {
583-
if (current_bw && bws[i] >= current_bw)
584-
continue;
585-
586-
if (bws[i] <= max_link_rate_code)
587-
break;
587+
default:
588+
/* If not given, start with max supported */
589+
bw_code = max_link_rate_code;
590+
break;
588591
}
589592

590593
for (lane_cnt = 1; lane_cnt <= max_lanes; lane_cnt <<= 1) {
591594
int bw;
592595
u32 rate;
593596

594-
bw = drm_dp_bw_code_to_link_rate(bws[i]);
597+
bw = drm_dp_bw_code_to_link_rate(bw_code);
595598
rate = zynqmp_dp_max_rate(bw, lane_cnt, bpp);
596599
if (pclock <= rate) {
597-
dp->mode.bw_code = bws[i];
600+
dp->mode.bw_code = bw_code;
598601
dp->mode.lane_cnt = lane_cnt;
599602
dp->mode.pclock = pclock;
600603
return dp->mode.bw_code;
@@ -1308,7 +1311,7 @@ zynqmp_dp_connector_detect(struct drm_connector *connector, bool force)
13081311
ret = drm_dp_dpcd_read(&dp->aux, 0x0, dp->dpcd,
13091312
sizeof(dp->dpcd));
13101313
if (ret < 0) {
1311-
dev_dbg(dp->dev, "DPCD read failes");
1314+
dev_dbg(dp->dev, "DPCD read failed");
13121315
goto disconnected;
13131316
}
13141317

drivers/gpu/vga/vgaarb.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ EXPORT_SYMBOL(vga_get);
529529
*
530530
* 0 on success, negative error code on failure.
531531
*/
532-
int vga_tryget(struct pci_dev *pdev, unsigned int rsrc)
532+
static int vga_tryget(struct pci_dev *pdev, unsigned int rsrc)
533533
{
534534
struct vga_device *vgadev;
535535
unsigned long flags;
@@ -554,7 +554,6 @@ int vga_tryget(struct pci_dev *pdev, unsigned int rsrc)
554554
spin_unlock_irqrestore(&vga_lock, flags);
555555
return rc;
556556
}
557-
EXPORT_SYMBOL(vga_tryget);
558557

559558
/**
560559
* vga_put - release lock on legacy VGA resources

drivers/video/fbdev/core/fbmem.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -957,7 +957,6 @@ static int fb_check_caps(struct fb_info *info, struct fb_var_screeninfo *var,
957957
int
958958
fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
959959
{
960-
int flags = info->flags;
961960
int ret = 0;
962961
u32 activate;
963962
struct fb_var_screeninfo old_var;
@@ -1052,9 +1051,6 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
10521051
event.data = &mode;
10531052
fb_notifier_call_chain(FB_EVENT_MODE_CHANGE, &event);
10541053

1055-
if (flags & FBINFO_MISC_USEREVENT)
1056-
fbcon_update_vcs(info, activate & FB_ACTIVATE_ALL);
1057-
10581054
return 0;
10591055
}
10601056
EXPORT_SYMBOL(fb_set_var);
@@ -1105,9 +1101,9 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
11051101
return -EFAULT;
11061102
console_lock();
11071103
lock_fb_info(info);
1108-
info->flags |= FBINFO_MISC_USEREVENT;
11091104
ret = fb_set_var(info, &var);
1110-
info->flags &= ~FBINFO_MISC_USEREVENT;
1105+
if (!ret)
1106+
fbcon_update_vcs(info, var.activate & FB_ACTIVATE_ALL);
11111107
unlock_fb_info(info);
11121108
console_unlock();
11131109
if (!ret && copy_to_user(argp, &var, sizeof(var)))

drivers/video/fbdev/core/fbsysfs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ static int activate(struct fb_info *fb_info, struct fb_var_screeninfo *var)
9191

9292
var->activate |= FB_ACTIVATE_FORCE;
9393
console_lock();
94-
fb_info->flags |= FBINFO_MISC_USEREVENT;
9594
err = fb_set_var(fb_info, var);
96-
fb_info->flags &= ~FBINFO_MISC_USEREVENT;
95+
if (!err)
96+
fbcon_update_vcs(fb_info, var->activate & FB_ACTIVATE_ALL);
9797
console_unlock();
9898
if (err)
9999
return err;

drivers/video/fbdev/ps3fb.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <linux/freezer.h>
3030
#include <linux/uaccess.h>
3131
#include <linux/fb.h>
32+
#include <linux/fbcon.h>
3233
#include <linux/init.h>
3334

3435
#include <asm/cell-regs.h>
@@ -824,12 +825,12 @@ static int ps3fb_ioctl(struct fb_info *info, unsigned int cmd,
824825
var = info->var;
825826
fb_videomode_to_var(&var, vmode);
826827
console_lock();
827-
info->flags |= FBINFO_MISC_USEREVENT;
828828
/* Force, in case only special bits changed */
829829
var.activate |= FB_ACTIVATE_FORCE;
830830
par->new_mode_id = val;
831831
retval = fb_set_var(info, &var);
832-
info->flags &= ~FBINFO_MISC_USEREVENT;
832+
if (!retval)
833+
fbcon_update_vcs(info, var.activate & FB_ACTIVATE_ALL);
833834
console_unlock();
834835
}
835836
break;

include/linux/fb.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,8 +400,6 @@ struct fb_tile_ops {
400400
#define FBINFO_HWACCEL_YPAN 0x2000 /* optional */
401401
#define FBINFO_HWACCEL_YWRAP 0x4000 /* optional */
402402

403-
#define FBINFO_MISC_USEREVENT 0x10000 /* event request
404-
from userspace */
405403
#define FBINFO_MISC_TILEBLITTING 0x20000 /* use tile blitting */
406404

407405
/* A driver may set this flag to indicate that it does want a set_par to be

include/linux/vgaarb.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,6 @@ static inline int vga_get_uninterruptible(struct pci_dev *pdev,
109109
return vga_get(pdev, rsrc, 0);
110110
}
111111

112-
#if defined(CONFIG_VGA_ARB)
113-
extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc);
114-
#else
115-
static inline int vga_tryget(struct pci_dev *pdev, unsigned int rsrc) { return 0; }
116-
#endif
117-
118112
#if defined(CONFIG_VGA_ARB)
119113
extern void vga_put(struct pci_dev *pdev, unsigned int rsrc);
120114
#else

0 commit comments

Comments
 (0)