Can you provide some information on the status of the patch with regards to getting it merged upstream? Has it been sent upstream, what sort of feedback has it received, is it getting applied to a subsystem maintainer's tree, etc?
People affected by this bug are probably wondering why the kernel team doesn't just apply the patch and fix it. The reason is that the kernel team is reluctant (not opposed) to apply any patch to a stable kernel that is not from upstream. Applying patches that don't come from upstream add greatly to the support of the kernel as other upstream patches may touch the same area as the non-upstream patch and may prevent them from applying cleanly. To submit your patch, send your patch with the detailed description/changelog and your Signoff (ending with Signed-off-by: your name <email>), to the emails listed from ./scripts/get_maintainer.pl drivers/SUBSYSTEM-DETAILS (the get_maintainer.pl is from the kernel sources). Once you have sent the patch upstream and it's accepted, please drop a note here so that we can cherry-pick/include the patch into Ubuntu kernel. -- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/1587885 Title: NULL pointer dereference in radeon drm code Status in linux package in Ubuntu: Confirmed Bug description: On one of my systems I use, display connector 0 does not have DDC. This results in the DRM code trying to use radeon_connector->ddc_bus when it is not set. This is known to have been an issue since the 3.2 series kernels. Known Problem Kernels: uBuntu 12.04 LTS (linux-3.2.55), uBuntu-MATE 14.04 LTS (linux-3.16.7) and uBuntu-MATE 16.04 LTS (linux-4.4.8) and linux-4.6.0 (git:/ /git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux). Trying to use the uBuntu-MATE 16.04 LTS LiveCD ubuntu-mate-16.04 -desktop-amd64.iso (from uBuntu-MATE website) showed the problem. Using a serial console I extracted the following information when trying to boot from a uBuntu-MATE 16.04 LTS LiveCD USB Stick (it had been upgraded from 4.4.0-21-generic in an attempt to get something usable): <snipped> [ 0.000000] Linux version 4.4.0-22-generic (buildd@lgw01-41) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2 016 (Ubuntu 4.4.0-22.40-generic 4.4.8) [ 0.000000] Command line: BOOT_IMAGE=/casper/vmlinuz.efi file=/cdrom/preseed/ubuntu-mate.seed boot=casper locale=en_GB console-setup/layoutcode=gb console=u art,io,0x3f8,115200n8 earlyprintk=ttyS0,115200n8 debug --- [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls <snipped> [ 0.000000] efi: EFI v2.00 by Phoenix Technologies Ltd. [ 0.000000] efi: EFI v2.00 by Phoenix Technologies Ltd. [ 0.000000] efi: [ 0.000000] efi: ACPI=0x973c7000 ACPI=0x973c7000 ACPI 2.0=0x973c7014 ACPI 2.0=0x973c7014 SMBIOS=0x9726b000 SMBIOS=0x9726b000 [ 0.000000] SMBIOS 2.6 present. [ 0.000000] SMBIOS 2.6 present. [ 0.000000] DMI: AMD Corporation EBrazos Platform/Persimmon, BIOS LV-683 Version: 1.1 02/14/2012 [ 0.000000] DMI: AMD Corporation EBrazos Platform/Persimmon, BIOS LV-683 Version: 1.1 02/14/2012 <snipped> [ 8.262990] [drm] ib test on ring 5 succeeded [ 8.288897] [drm] Radeon Display Connectors [ 8.293175] [drm] Connector 0: [ 8.296252] [drm] DP-1 [ 8.298791] [drm] Encoders: [ 8.301770] [drm] DFP1: INTERNAL_UNIPHY [ 8.305973] [drm] Connector 1: [ 8.309043] [drm] DP-2 [ 8.311598] [drm] HPD2 [ 8.314169] [drm] DDC: 0x6440 0x6440 0x6444 0x6444 0x6448 0x6448 0x644c 0x644c [ 8.321609] [drm] Encoders: [ 8.324589] [drm] DFP2: INTERNAL_UNIPHY [ 8.328793] [drm] Connector 2: [ 8.331856] [drm] VGA-1 [ 8.332316] scsi 0:0:0:0: Direct-Access SMI USB DISK 1100 PQ: 0 ANSI: 0 CCS [ 8.342947] [drm] DDC: 0x64d8 0x64d8 0x64dc 0x64dc 0x64e0 0x64e0 0x64e4 0x64e4 [ 8.350341] [drm] Encoders: [ 8.353310] [drm] CRT1: INTERNAL_KLDSCP_DAC1 [ 8.358195] BUG: unable to handle kernel NULL pointer dereference at 0000000000000409 [ 8.366104] IP:[ 8.367176] sd 0:0:0:0: Attached scsi generic sg1 type 0 [ 8.368538] sd 0:0:0:0: [sdb] 7831552 512-byte logical blocks: (4.01 GB/3.73 GiB) [ 8.369421] sd 0:0:0:0: [sdb] Write Protect is off [ 8.369427] sd 0:0:0:0: [sdb] Mode Sense: 43 00 00 00 [ 8.370288] sd 0:0:0:0: [sdb] No Caching mode page found [ 8.370292] sd 0:0:0:0: [sdb] Assuming drive cache: write through [ 8.374944] sdb: sdb1 [ 8.378398] sd 0:0:0:0: [sdb] Attached SCSI removable disk [ 8.409733] [<ffffffffc02024da>] radeon_dp_getsinktype+0x1a/0x30 [radeon] [ 8.416805] PGD 0 [ 8.418841] Oops: 0000 [#1] SMP [ 8.422104] Modules linked in: hid_generic e1000e psmouse amdkfd usbhid uas amd_iommu_v2 ptp radeon(+) pps_core e1000(+) hid i2c_algo_bit ttm drm_kms_helper usb_storage syscopyarea sysfillrect sysimgblt ahci fb_sys_fops libahci drm video fjes [ 8.444029] CPU: 0 PID: 131 Comm: systemd-udevd Not tainted 4.4.0-22-generic #40-Ubuntu [ 8.452036] Hardware name: AMD Corporation EBrazos Platform/Persimmon, BIOS LV-683 Version: 1.1 02/14/2012 [ 8.461708] task: ffff88014780be80 ti: ffff880147888000 task.ti: ffff880147888000 [ 8.469194] RIP: 0010:[<ffffffffc02024da>] [<ffffffffc02024da>] radeon_dp_getsinktype+0x1a/0x30 [radeon] [ 8.478850] RSP: 0018:ffff88014788b850 EFLAGS: 00010246 [ 8.484179] RAX: 0000000000000000 RBX: ffff88003485f000 RCX: 0000000000000000 [ 8.491321] RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff88003485f000 [ 8.498469] RBP: ffff88014788b850 R08: 0000000000000000 R09: ffffffffc004aff6 [ 8.505602] R10: ffffea0000d5e540 R11: 0000000000000000 R12: 0000000000000001 [ 8.506137] e1000 0000:05:0b.0 eth1: (PCI:33MHz:32-bit) 00:03:1d:09:3b:61 [ 8.506142] e1000 0000:05:0b.0 eth1: Intel(R) PRO/1000 Network Connection [ 8.526299] R13: ffff8800351f4080 R14: ffff880035120000 R15: ffff8801478e7000 [ 8.533441] FS: 00007f4ed97678c0(0000) GS:ffff88014ec00000(0000) knlGS:0000000000000000 [ 8.541525] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 8.547263] CR2: 0000000000000409 CR3: 0000000149f2d000 CR4: 00000000000006f0 [ 8.554396] Stack: [ 8.556412] ffff88014788b888 ffffffffc01c27a6 ffff88003485f050 ffff88003485f000 [ 8.563867] 0000000000000003 ffff88003574e000 0000000000000001 ffff88014788b8e8 [ 8.571329] ffffffffc00ccd95 ffff88014788b920 ffffffffc01a9319 ffff8801478e6200 [ 8.578789] Call Trace: [ 8.581289] [<ffffffffc01c27a6>] radeon_dp_detect+0x206/0x2b0 [radeon] [ 8.587918] [<ffffffffc00ccd95>] drm_helper_probe_single_connector_modes_merge_bits+0x235/0x4d0 [drm_kms_helper] [ 8.598217] [<ffffffffc01a9319>] ? atombios_crtc_disable+0x39/0x350 [radeon] [ 8.605356] [<ffffffffc00cd043>] drm_helper_probe_single_connector_modes+0x13/0x20 [drm_kms_helper] [ 8.614508] [<ffffffffc00d990e>] drm_fb_helper_initial_config+0xae/0x420 [drm_kms_helper] [ 8.622816] [<ffffffffc01cd16e>] radeon_fbdev_init+0xee/0x110 [radeon] [ 8.629471] [<ffffffffc01c726f>] radeon_modeset_init+0x43f/0xa10 [radeon] [ 8.636391] [<ffffffffc019f513>] radeon_driver_load_kms+0x123/0x220 [radeon] [ 8.643565] [<ffffffffc0035397>] drm_dev_register+0xa7/0xb0 [drm] [ 8.649765] [<ffffffffc00379cd>] drm_get_pci_dev+0x8d/0x1e0 [drm] [ 8.655985] [<ffffffffc019b3e0>] radeon_pci_probe+0xa0/0xb0 [radeon] [ 8.662438] [<ffffffff81439dc5>] local_pci_probe+0x45/0xa0 [ 8.668006] [<ffffffff8143b203>] pci_device_probe+0x103/0x150 [ 8.673841] [<ffffffff8154c6e2>] driver_probe_device+0x222/0x4a0 [ 8.679939] [<ffffffff8154c9e4>] __driver_attach+0x84/0x90 [ 8.685519] [<ffffffff8154c960>] ? driver_probe_device+0x4a0/0x4a0 [ 8.691787] [<ffffffff8154a30c>] bus_for_each_dev+0x6c/0xc0 [ 8.697445] [<ffffffff8154be9e>] driver_attach+0x1e/0x20 [ 8.702845] [<ffffffff8154b9db>] bus_add_driver+0x1eb/0x280 [ 8.708504] [<ffffffff8154d2f0>] driver_register+0x60/0xe0 [ 8.714077] [<ffffffff814396ec>] __pci_register_driver+0x4c/0x50 [ 8.720191] [<ffffffffc0037c00>] drm_pci_init+0xe0/0x110 [drm] [ 8.726104] [<ffffffffc030d000>] ? 0xffffffffc030d000 [ 8.731288] [<ffffffffc030d09d>] radeon_init+0x9d/0xb2 [radeon] [ 8.737297] [<ffffffff81002123>] do_one_initcall+0xb3/0x200 [ 8.742955] [<ffffffff811cee51>] ? __vunmap+0x91/0xe0 [ 8.748093] [<ffffffff811eaf83>] ? kmem_cache_alloc_trace+0x183/0x1f0 [ 8.754622] [<ffffffff8118c233>] do_init_module+0x5f/0x1cf [ 8.760193] [<ffffffff81109e67>] load_module+0x1667/0x1c00 [ 8.765764] [<ffffffff81106410>] ? __symbol_put+0x60/0x60 [ 8.771252] [<ffffffff81212820>] ? kernel_read+0x50/0x80 [ 8.776651] [<ffffffff8110a644>] SYSC_finit_module+0xb4/0xe0 [ 8.782395] [<ffffffff8110a68e>] SyS_finit_module+0xe/0x10 [ 8.787970] [<ffffffff818252f2>] entry_SYSCALL_64_fastpath+0x16/0x71 [ 8.794404] Code: 41 5d 41 5e 41 5f 5d c3 66 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 8b 87 a0 03 00 00 45 31 c0 31 d2 be 01 00 00 00 48 89 e5 <0f> b6 8 8 09 04 00 00 48 8b 07 48 8b 78 28 e8 23 f6 ff ff 5d c3 [ 8.814354] RIP [<ffffffffc02024da>] radeon_dp_getsinktype+0x1a/0x30 [radeon] [ 8.821645] RSP <ffff88014788b850> [ 8.825135] CR2: 0000000000000409 [ 8.828551] ---[ end trace 9fce5ace7679b4a0 ]--- Looking at the code, there are a number of places that assume that radeon_connector->ddc_bus is not a NULL pointer. The following workaround fixes the issue by ensuring that ddc_bus is always validated before use: diff -rupd linux-source-4.4.0.orig/drivers/gpu/drm/radeon/atombios_dp.c linux-source-4.4.0/drivers/gpu/drm/radeon/atombios_dp.c --- linux-source-4.4.0.orig/drivers/gpu/drm/radeon/atombios_dp.c 2016-05-12 23:03:23.000000000 +0100 +++ linux-source-4.4.0/drivers/gpu/drm/radeon/atombios_dp.c 2016-06-01 13:16:43.000000000 +0100 @@ -232,6 +232,9 @@ void radeon_dp_aux_init(struct radeon_co struct radeon_device *rdev = dev->dev_private; int ret; + if (!radeon_connector->ddc_bus) + return; + radeon_connector->ddc_bus->rec.hpd = radeon_connector->hpd.hpd; radeon_connector->ddc_bus->aux.dev = radeon_connector->base.kdev; if (ASIC_IS_DCE5(rdev)) { @@ -352,6 +355,9 @@ u8 radeon_dp_getsinktype(struct radeon_c struct drm_device *dev = radeon_connector->base.dev; struct radeon_device *rdev = dev->dev_private; + if (!radeon_connector->ddc_bus) + return 0; + return radeon_dp_encoder_service(rdev, ATOM_DP_ACTION_GET_SINK_TYPE, 0, radeon_connector->ddc_bus->rec.i2c_id, 0); } @@ -364,6 +370,9 @@ static void radeon_dp_probe_oui(struct r if (!(dig_connector->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT)) return; + if (!radeon_connector->ddc_bus) + return; + if (drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_SINK_OUI, buf, 3) == 3) DRM_DEBUG_KMS("Sink OUI: %02hx%02hx%02hx\n", buf[0], buf[1], buf[2]); @@ -379,6 +388,9 @@ bool radeon_dp_getdpcd(struct radeon_con u8 msg[DP_DPCD_SIZE]; int ret, i; + if (!radeon_connector->ddc_bus) + return false; + for (i = 0; i < 7; i++) { ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg, DP_DPCD_SIZE); @@ -416,24 +428,26 @@ int radeon_dp_get_panel_mode(struct drm_ dig_connector = radeon_connector->con_priv; - if (dp_bridge != ENCODER_OBJECT_ID_NONE) { - /* DP bridge chips */ - if (drm_dp_dpcd_readb(&radeon_connector->ddc_bus->aux, - DP_EDP_CONFIGURATION_CAP, &tmp) == 1) { - if (tmp & 1) - panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; - else if ((dp_bridge == ENCODER_OBJECT_ID_NUTMEG) || - (dp_bridge == ENCODER_OBJECT_ID_TRAVIS)) - panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE; - else - panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; - } - } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { - /* eDP */ - if (drm_dp_dpcd_readb(&radeon_connector->ddc_bus->aux, - DP_EDP_CONFIGURATION_CAP, &tmp) == 1) { - if (tmp & 1) - panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; + if (radeon_connector->ddc_bus) { + if (dp_bridge != ENCODER_OBJECT_ID_NONE) { + /* DP bridge chips */ + if (drm_dp_dpcd_readb(&radeon_connector->ddc_bus->aux, + DP_EDP_CONFIGURATION_CAP, &tmp) == 1) { + if (tmp & 1) + panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; + else if ((dp_bridge == ENCODER_OBJECT_ID_NUTMEG) || + (dp_bridge == ENCODER_OBJECT_ID_TRAVIS)) + panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE; + else + panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; + } + } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { + /* eDP */ + if (drm_dp_dpcd_readb(&radeon_connector->ddc_bus->aux, + DP_EDP_CONFIGURATION_CAP, &tmp) == 1) { + if (tmp & 1) + panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; + } } } @@ -499,6 +513,9 @@ bool radeon_dp_needs_link_train(struct r u8 link_status[DP_LINK_STATUS_SIZE]; struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; + if (!radeon_connector->ddc_bus) + return false; + if (drm_dp_dpcd_read_link_status(&radeon_connector->ddc_bus->aux, link_status) <= 0) return false; @@ -519,7 +536,7 @@ void radeon_dp_set_rx_power_state(struct dig_connector = radeon_connector->con_priv; /* power up/down the sink */ - if (dig_connector->dpcd[0] >= 0x11) { + if (radeon_connector->ddc_bus && dig_connector->dpcd[0] >= 0x11) { drm_dp_dpcd_writeb(&radeon_connector->ddc_bus->aux, DP_SET_POWER, power_state); usleep_range(1000, 2000); @@ -822,7 +839,8 @@ void radeon_dp_link_train(struct drm_enc else dp_info.enc_id |= ATOM_DP_CONFIG_LINK_A; - if (drm_dp_dpcd_readb(&radeon_connector->ddc_bus->aux, DP_MAX_LANE_COUNT, &tmp) + if (radeon_connector->ddc_bus && + drm_dp_dpcd_readb(&radeon_connector->ddc_bus->aux, DP_MAX_LANE_COUNT, &tmp) == 1) { if (ASIC_IS_DCE5(rdev) && (tmp & DP_TPS3_SUPPORTED)) dp_info.tp3_supported = true; @@ -838,7 +856,7 @@ void radeon_dp_link_train(struct drm_enc dp_info.connector = connector; dp_info.dp_lane_count = dig_connector->dp_lane_count; dp_info.dp_clock = dig_connector->dp_clock; - dp_info.aux = &radeon_connector->ddc_bus->aux; + dp_info.aux = radeon_connector->ddc_bus ? &radeon_connector->ddc_bus->aux : 0; if (radeon_dp_link_train_init(&dp_info)) goto done; diff -rupd linux-source-4.4.0.orig/drivers/gpu/drm/radeon/radeon_connectors.c linux-source-4.4.0/drivers/gpu/drm/radeon/radeon_connectors.c --- linux-source-4.4.0.orig/drivers/gpu/drm/radeon/radeon_connectors.c 2016-01-10 23:01:32.000000000 +0000 +++ linux-source-4.4.0/drivers/gpu/drm/radeon/radeon_connectors.c 2016-06-01 13:21:24.000000000 +0100 @@ -327,26 +327,27 @@ static void radeon_connector_get_edid(st if (radeon_connector->router.ddc_valid) radeon_router_select_ddc_port(radeon_connector); - if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != - ENCODER_OBJECT_ID_NONE) && - radeon_connector->ddc_bus->has_aux) { - radeon_connector->edid = drm_get_edid(connector, - &radeon_connector->ddc_bus->aux.ddc); - } else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) || - (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) { - struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; - - if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || - dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && - radeon_connector->ddc_bus->has_aux) - radeon_connector->edid = drm_get_edid(&radeon_connector->base, + if (radeon_connector->ddc_bus) { + if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != + ENCODER_OBJECT_ID_NONE) && + radeon_connector->ddc_bus->has_aux) { + radeon_connector->edid = drm_get_edid(connector, &radeon_connector->ddc_bus->aux.ddc); - else if (radeon_connector->ddc_bus) + } else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) || + (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) { + struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; + + if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || + dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && + radeon_connector->ddc_bus->has_aux) + radeon_connector->edid = drm_get_edid(&radeon_connector->base, + &radeon_connector->ddc_bus->aux.ddc); + else + radeon_connector->edid = drm_get_edid(&radeon_connector->base, + &radeon_connector->ddc_bus->adapter); + } else radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); - } else if (radeon_connector->ddc_bus) { - radeon_connector->edid = drm_get_edid(&radeon_connector->base, - &radeon_connector->ddc_bus->adapter); } if (!radeon_connector->edid) { @@ -1306,6 +1307,7 @@ radeon_dvi_detect(struct drm_connector * continue; list_radeon_connector = to_radeon_connector(list_connector); if (list_radeon_connector->shared_ddc && + radeon_connector->ddc_bus && (list_radeon_connector->ddc_bus->rec.i2c_id == radeon_connector->ddc_bus->rec.i2c_id)) { /* cases where both connectors are digital */ diff -rupd linux-source-4.4.0.orig/drivers/gpu/drm/radeon/radeon_dp_mst.c linux-source-4.4.0/drivers/gpu/drm/radeon/radeon_dp_mst.c --- linux-source-4.4.0.orig/drivers/gpu/drm/radeon/radeon_dp_mst.c 2016-05-12 23:03:23.000000000 +0100 +++ linux-source-4.4.0/drivers/gpu/drm/radeon/radeon_dp_mst.c 2016-06-01 13:16:43.000000000 +0100 @@ -662,7 +662,7 @@ radeon_dp_mst_init(struct radeon_connect { struct drm_device *dev = radeon_connector->base.dev; - if (!radeon_connector->ddc_bus->has_aux) + if (!radeon_connector->ddc_bus || !radeon_connector->ddc_bus->has_aux) return 0; radeon_connector->mst_mgr.cbs = &mst_cbs; @@ -689,6 +689,9 @@ radeon_dp_mst_probe(struct radeon_connec if (dig_connector->dpcd[DP_DPCD_REV] < 0x12) return 0; + if (!radeon_connector->ddc_bus) + return 0; + ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_MSTM_CAP, msg, 1); if (ret) { @@ -718,6 +721,9 @@ radeon_dp_mst_check_status(struct radeon int ret = 0; bool handled; + if (!radeon_connector->ddc_bus) + return -EINVAL; + dret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_SINK_COUNT_ESI, esi, 8); go_again: diff -rupd linux-source-4.4.0.orig/drivers/gpu/drm/radeon/radeon_i2c.c linux-source-4.4.0/drivers/gpu/drm/radeon/radeon_i2c.c --- linux-source-4.4.0.orig/drivers/gpu/drm/radeon/radeon_i2c.c 2016-01-10 23:01:32.000000000 +0000 +++ linux-source-4.4.0/drivers/gpu/drm/radeon/radeon_i2c.c 2016-06-01 13:16:43.000000000 +0100 @@ -63,6 +63,9 @@ bool radeon_ddc_probe(struct radeon_conn if (radeon_connector->router.ddc_valid) radeon_router_select_ddc_port(radeon_connector); + if (!radeon_connector->ddc_bus) + return false; + if (use_aux) { ret = i2c_transfer(&radeon_connector->ddc_bus->aux.ddc, msgs, 2); } else { I think the changes to these four files should be pushed back to the main line kernel and it is probably also desirable to back port these changes to earlier kernels. --- ApportVersion: 2.20.1-0ubuntu2.1 Architecture: amd64 AudioDevicesInUse: Error: command ['fuser', '-v', '/dev/snd/seq', '/dev/snd/timer'] failed with exit code 1: CasperVersion: 1.376 CurrentDesktop: MATE DistroRelease: Ubuntu 16.04 LiveMediaBuild: Ubuntu-MATE 16.04 LTS "Xenial Xerus" - Release amd64 (20160420.1) MachineType: AMD Corporation EBrazos Platform Package: linux (not installed) ProcEnviron: TERM=xterm PATH=(custom, no user) XDG_RUNTIME_DIR=<set> LANG=en_GB.UTF-8 SHELL=/bin/bash ProcFB: 0 radeondrmfb ProcKernelCmdLine: BOOT_IMAGE=/casper/vmlinuz.efi file=/cdrom/preseed/username.seed boot=casper locale=en_GB console-setup/layoutcode=gb radeon.pcie_gen2=0 radeon.audio=0 --- ProcVersionSignature: Ubuntu 4.4.0-22.40-generic 4.4.8 RelatedPackageVersions: linux-restricted-modules-4.4.0-22-generic N/A linux-backports-modules-4.4.0-22-generic N/A linux-firmware 1.157 RfKill: Tags: xenial Uname: Linux 4.4.0-22-generic x86_64 UpgradeStatus: No upgrade log present (probably fresh install) UserGroups: adm cdrom dip lpadmin plugdev sambashare sudo _MarkForUpload: True dmi.bios.date: 02/14/2012 dmi.bios.vendor: Phoenix Technologies Ltd. dmi.bios.version: LV-683 Version: 1.1 dmi.board.asset.tag: Base Board Asset Tag Unknown dmi.board.name: Persimmon dmi.board.vendor: AMD Corp. dmi.board.version: A11 dmi.chassis.asset.tag: Asset Tag dmi.chassis.type: 9 dmi.chassis.vendor: AMD Corporation dmi.chassis.version: 0.1 dmi.modalias: dmi:bvnPhoenixTechnologiesLtd.:bvrLV-683Version1.1:bd02/14/2012:svnAMDCorporation:pnEBrazosPlatform:pvr0.1:rvnAMDCorp.:rnPersimmon:rvrA11:cvnAMDCorporation:ct9:cvr0.1: dmi.product.name: EBrazos Platform dmi.product.version: 0.1 dmi.sys.vendor: AMD Corporation To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1587885/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp