diff --git a/debian/changelog b/debian/changelog index 39547c40a..894b5439b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -linux (3.2.38-1) UNRELEASED; urgency=low +linux (3.2.39-1) UNRELEASED; urgency=low * New upstream stable update: http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.36 @@ -67,6 +67,38 @@ linux (3.2.38-1) UNRELEASED; urgency=low (Closes: #696321) - printk: fix buffer overflow when calling log_prefix function from call_console_drivers + http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.39 + - USB: XHCI: fix memory leak of URB-private data + - sched/rt: Use root_domain of rt_rq not current processor + - mwifiex: fix incomplete scan in case of IE parsing error + - x86-64: Replace left over sti/cli in ia32 audit exit code + - Bluetooth: Fix handling of unexpected SMP PDUs + - ptrace/x86: Partly fix set_task_blockstep()->update_debugctlmsr() logic + - Fix race condition with PTRACE_SETREGS and fatal signal (CVE-2013-0871) + + ptrace: introduce signal_wake_up_state() and ptrace_signal_wake_up() + + ptrace: ensure arch_ptrace/ptrace_request can never race with SIGKILL + + wake_up_process() should be never used to wakeup a TASK_STOPPED/TRACED + task + - net: prevent setting ttl=0 via IP_TTL + - ipv6: fix header length calculation in ip6_append_data() + - netxen: fix off by one bug in netxen_release_tx_buffer() + - r8169: remove the obsolete and incorrect AMD workaround + - net: loopback: fix a dst refcounting issue + - packet: fix leakage of tx_ring memory + - net: sctp: sctp_setsockopt_auth_key: use kzfree instead of kfree + - net: sctp: sctp_endpoint_free: zero out secret key data + - xen/netback: shutdown the ring if it contains garbage. (CVE-2013-0216) + - xen/netback: don't leak pages on failure in xen_netbk_tx_check_gop. + - xen/netback: free already allocated memory on failure in + xen_netbk_get_requests + - netback: correct netbk_tx_err to handle wrap around. (CVE-2013-0217) + - tcp: frto should not set snd_cwnd to 0 + - tcp: fix for zero packets_in_flight was too broad + - tcp: fix MSG_SENDPAGE_NOTLAST logic + - bridge: Pull ip header into skb->data before looking into ip header. + (Closes: #697903) + - x86/xen: don't assume %ds is usable in xen_iret for 32-bit PVOPS. + (CVE-2013-0228) [ Ben Hutchings ] * Input: wacom - fix touch support for Bamboo Fun CTH-461 @@ -114,8 +146,6 @@ linux (3.2.38-1) UNRELEASED; urgency=low - sched: Init idle->on_rq in init_idle() - sched: Check for idle task in might_sleep() - mm: swap: Initialize local locks early - * bridge: Pull ip header into skb->data before looking into ip header. - (Closes: #697903) * [armel/versatile,armhf/vexpress] i2c: Enable I2C, I2C_VERSATILE as modules (Closes: #696182) * ext4: Fix corruption by hole punch in large files (Closes: #685726) @@ -144,6 +174,9 @@ linux (3.2.38-1) UNRELEASED; urgency=low - possible bugfix, au_lkup_by_ino() returns ESTALE * [x86] efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot parameter + * drm, agp: Update to 3.4.32 + - drm/radeon: add WAIT_UNTIL to the non-VM safe regs list for cayman/TN + - drm/radeon: prevent crash in the ring space allocation [ Aurelien Jarno ] * [armhf/vexpress] Add kernel udebs. diff --git a/debian/patches/bugfix/all/bridge-Pull-ip-header-into-skb-data-before-looking-i.patch b/debian/patches/bugfix/all/bridge-Pull-ip-header-into-skb-data-before-looking-i.patch deleted file mode 100644 index 7c0d318ac..000000000 --- a/debian/patches/bugfix/all/bridge-Pull-ip-header-into-skb-data-before-looking-i.patch +++ /dev/null @@ -1,30 +0,0 @@ -From: Sarveshwar Bandi -Date: Wed, 10 Oct 2012 01:15:01 +0000 -Subject: bridge: Pull ip header into skb->data before looking into ip header. - -commit 6caab7b0544e83e6c160b5e80f5a4a7dd69545c7 upstream. - -If lower layer driver leaves the ip header in the skb fragment, it needs to -be first pulled into skb->data before inspecting ip header length or ip version -number. - -Signed-off-by: Sarveshwar Bandi -Signed-off-by: David S. Miller ---- - net/bridge/br_netfilter.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c -index 68e8f36..fe43bc7 100644 ---- a/net/bridge/br_netfilter.c -+++ b/net/bridge/br_netfilter.c -@@ -265,6 +265,9 @@ static int br_parse_ip_options(struct sk_buff *skb) - struct net_device *dev = skb->dev; - u32 len; - -+ if (!pskb_may_pull(skb, sizeof(struct iphdr))) -+ goto inhdr_error; -+ - iph = ip_hdr(skb); - opt = &(IPCB(skb)->opt); - diff --git a/debian/patches/features/all/drm/drm-3.4.patch b/debian/patches/features/all/drm/drm-3.4.patch index d501e8f89..e8affe5a8 100644 --- a/debian/patches/features/all/drm/drm-3.4.patch +++ b/debian/patches/features/all/drm/drm-3.4.patch @@ -47730,7 +47730,7 @@ index fee0ad0..342ffb7 100644 drm_encoder_helper_add(&crt->base.base, &intel_crt_helper_funcs); diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index c05e825..3c9b9c5 100644 +index 7817429..3c9b9c5 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -75,7 +75,7 @@ struct intel_limit { @@ -49051,13 +49051,11 @@ index c05e825..3c9b9c5 100644 OUT_RING(obj->gtt_offset | obj->tiling_mode); /* XXX Enabling the panel-fitter across page-flip is so far -@@ -7154,15 +7441,11 @@ static int intel_gen4_queue_flip(struct drm_device *dev, +@@ -7154,13 +7441,11 @@ static int intel_gen4_queue_flip(struct drm_device *dev, pf = 0; pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff; OUT_RING(pf | pipesrc); - -- intel_mark_page_flip_active(intel_crtc); -- - intel_mark_page_flip_active(intel_crtc); ADVANCE_LP_RING(); return 0; @@ -49068,7 +49066,7 @@ index c05e825..3c9b9c5 100644 err: return ret; } -@@ -7187,17 +7470,23 @@ static int intel_gen6_queue_flip(struct drm_device *dev, +@@ -7185,19 +7470,23 @@ static int intel_gen6_queue_flip(struct drm_device *dev, OUT_RING(MI_DISPLAY_FLIP | MI_DISPLAY_FLIP_PLANE(intel_crtc->plane)); @@ -49086,6 +49084,8 @@ index c05e825..3c9b9c5 100644 + pf = 0; pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff; OUT_RING(pf | pipesrc); +- +- intel_mark_page_flip_active(intel_crtc); ADVANCE_LP_RING(); return 0; @@ -72957,7 +72957,7 @@ index 7b4eeb7..19a0114 100644 #include diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c -index 0977849..4a1d8f3 100644 +index 0977849..c62132c 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c @@ -50,6 +50,39 @@ static const u32 crtc_offsets[6] = @@ -73009,7 +73009,7 @@ index 0977849..4a1d8f3 100644 { u32 tmp = RREG32(MC_SHARED_CHMAP); -@@ -1109,11 +1142,20 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav +@@ -1109,11 +1142,24 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav crtc_enabled = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]) & EVERGREEN_CRTC_MASTER_EN; if (crtc_enabled) { save->crtc_enabled[i] = true; @@ -73023,19 +73023,23 @@ index 0977849..4a1d8f3 100644 + if (!(tmp & EVERGREEN_CRTC_BLANK_DATA_EN)) { + radeon_wait_for_vblank(rdev, i); + tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp); ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); + } + } else { + tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]); + if (!(tmp & EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE)) { + radeon_wait_for_vblank(rdev, i); + tmp |= EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE; ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + WREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i], tmp); ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); + } } /* wait for the next frame */ frame_count = radeon_get_vblank_counter(rdev, i); -@@ -1127,7 +1169,7 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav +@@ -1127,7 +1173,7 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav } } @@ -73044,7 +73048,16 @@ index 0977849..4a1d8f3 100644 blackout = RREG32(MC_SHARED_BLACKOUT_CNTL); if ((blackout & BLACKOUT_MODE_MASK) != 1) { -@@ -1166,10 +1208,16 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s +@@ -1137,6 +1183,8 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav + blackout &= ~BLACKOUT_MODE_MASK; + WREG32(MC_SHARED_BLACKOUT_CNTL, blackout | 1); + } ++ /* wait for the MC to settle */ ++ udelay(100); + } + + void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save) +@@ -1166,10 +1214,20 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s WREG32(BIF_FB_EN, FB_READ_EN | FB_WRITE_EN); for (i = 0; i < rdev->num_crtc; i++) { @@ -73056,16 +73069,20 @@ index 0977849..4a1d8f3 100644 + if (ASIC_IS_DCE6(rdev)) { + tmp = RREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i]); + tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp); ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); + } else { + tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]); + tmp &= ~EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE; ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + WREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i], tmp); ++ WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); + } /* wait for the next frame */ frame_count = radeon_get_vblank_counter(rdev, i); for (j = 0; j < rdev->usec_timeout; j++) { -@@ -1229,7 +1277,10 @@ void evergreen_mc_program(struct radeon_device *rdev) +@@ -1229,7 +1287,10 @@ void evergreen_mc_program(struct radeon_device *rdev) rdev->mc.vram_end >> 12); } WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, rdev->vram_scratch.gpu_addr >> 12); @@ -73077,7 +73094,7 @@ index 0977849..4a1d8f3 100644 tmp = RREG32(MC_FUS_VM_FB_OFFSET) & 0x000FFFFF; tmp |= ((rdev->mc.vram_end >> 20) & 0xF) << 24; tmp |= ((rdev->mc.vram_start >> 20) & 0xF) << 20; -@@ -1264,18 +1315,20 @@ void evergreen_mc_program(struct radeon_device *rdev) +@@ -1264,18 +1325,20 @@ void evergreen_mc_program(struct radeon_device *rdev) */ void evergreen_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) { @@ -73104,7 +73121,7 @@ index 0977849..4a1d8f3 100644 } -@@ -1313,71 +1366,73 @@ static int evergreen_cp_load_microcode(struct radeon_device *rdev) +@@ -1313,71 +1376,73 @@ static int evergreen_cp_load_microcode(struct radeon_device *rdev) static int evergreen_cp_start(struct radeon_device *rdev) { @@ -73209,7 +73226,7 @@ index 0977849..4a1d8f3 100644 u32 tmp; u32 rb_bufsz; int r; -@@ -1395,13 +1450,14 @@ int evergreen_cp_resume(struct radeon_device *rdev) +@@ -1395,13 +1460,14 @@ int evergreen_cp_resume(struct radeon_device *rdev) RREG32(GRBM_SOFT_RESET); /* Set ring buffer size */ @@ -73226,7 +73243,7 @@ index 0977849..4a1d8f3 100644 /* Set the write pointer delay */ WREG32(CP_RB_WPTR_DELAY, 0); -@@ -1409,8 +1465,8 @@ int evergreen_cp_resume(struct radeon_device *rdev) +@@ -1409,8 +1475,8 @@ int evergreen_cp_resume(struct radeon_device *rdev) /* Initialize the ring buffer's read and write pointers */ WREG32(CP_RB_CNTL, tmp | RB_RPTR_WR_ENA); WREG32(CP_RB_RPTR_WR, 0); @@ -73237,7 +73254,7 @@ index 0977849..4a1d8f3 100644 /* set the wb address wether it's enabled or not */ WREG32(CP_RB_RPTR_ADDR, -@@ -1428,16 +1484,16 @@ int evergreen_cp_resume(struct radeon_device *rdev) +@@ -1428,16 +1494,16 @@ int evergreen_cp_resume(struct radeon_device *rdev) mdelay(1); WREG32(CP_RB_CNTL, tmp); @@ -73259,7 +73276,7 @@ index 0977849..4a1d8f3 100644 return r; } return 0; -@@ -1730,7 +1786,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev) +@@ -1730,7 +1796,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev) case CHIP_SUMO: rdev->config.evergreen.num_ses = 1; rdev->config.evergreen.max_pipes = 4; @@ -73268,7 +73285,7 @@ index 0977849..4a1d8f3 100644 if (rdev->pdev->device == 0x9648) rdev->config.evergreen.max_simds = 3; else if ((rdev->pdev->device == 0x9647) || -@@ -1819,7 +1875,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev) +@@ -1819,7 +1885,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev) break; case CHIP_CAICOS: rdev->config.evergreen.num_ses = 1; @@ -73277,7 +73294,7 @@ index 0977849..4a1d8f3 100644 rdev->config.evergreen.max_tile_pipes = 2; rdev->config.evergreen.max_simds = 2; rdev->config.evergreen.max_backends = 1 * rdev->config.evergreen.num_ses; -@@ -1868,7 +1924,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev) +@@ -1868,7 +1934,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev) mc_shared_chmap = RREG32(MC_SHARED_CHMAP); @@ -73288,7 +73305,7 @@ index 0977849..4a1d8f3 100644 mc_arb_ramcfg = RREG32(FUS_MC_ARB_RAMCFG); else mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG); -@@ -2272,7 +2330,9 @@ int evergreen_mc_init(struct radeon_device *rdev) +@@ -2272,7 +2340,9 @@ int evergreen_mc_init(struct radeon_device *rdev) /* Get VRAM informations */ rdev->mc.vram_is_ddr = true; @@ -73299,7 +73316,7 @@ index 0977849..4a1d8f3 100644 tmp = RREG32(FUS_MC_ARB_RAMCFG); else tmp = RREG32(MC_ARB_RAMCFG); -@@ -2304,12 +2364,14 @@ int evergreen_mc_init(struct radeon_device *rdev) +@@ -2304,12 +2374,14 @@ int evergreen_mc_init(struct radeon_device *rdev) rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); /* Setup GPU memory space */ @@ -73316,7 +73333,7 @@ index 0977849..4a1d8f3 100644 rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; } -@@ -2320,7 +2382,7 @@ int evergreen_mc_init(struct radeon_device *rdev) +@@ -2320,7 +2392,7 @@ int evergreen_mc_init(struct radeon_device *rdev) return 0; } @@ -73325,7 +73342,7 @@ index 0977849..4a1d8f3 100644 { u32 srbm_status; u32 grbm_status; -@@ -2333,19 +2395,19 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev) +@@ -2333,19 +2405,19 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev) grbm_status_se0 = RREG32(GRBM_STATUS_SE0); grbm_status_se1 = RREG32(GRBM_STATUS_SE1); if (!(grbm_status & GUI_ACTIVE)) { @@ -73352,7 +73369,7 @@ index 0977849..4a1d8f3 100644 } static int evergreen_gpu_soft_reset(struct radeon_device *rdev) -@@ -2437,7 +2499,13 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev) +@@ -2437,7 +2509,13 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev) { u32 tmp; @@ -73367,7 +73384,7 @@ index 0977849..4a1d8f3 100644 WREG32(GRBM_INT_CNTL, 0); WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); -@@ -2461,7 +2529,9 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev) +@@ -2461,7 +2539,9 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev) WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0); } @@ -73378,7 +73395,7 @@ index 0977849..4a1d8f3 100644 WREG32(DACB_AUTODETECT_INT_CONTROL, 0); tmp = RREG32(DC_HPD1_INT_CONTROL) & DC_HPDx_INT_POLARITY; -@@ -2482,6 +2552,7 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev) +@@ -2482,6 +2562,7 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev) int evergreen_irq_set(struct radeon_device *rdev) { u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE; @@ -73386,7 +73403,7 @@ index 0977849..4a1d8f3 100644 u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0; u32 hpd1, hpd2, hpd3, hpd4, hpd5, hpd6; u32 grbm_int_cntl = 0; -@@ -2506,11 +2577,28 @@ int evergreen_irq_set(struct radeon_device *rdev) +@@ -2506,11 +2587,28 @@ int evergreen_irq_set(struct radeon_device *rdev) hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN; hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN; @@ -73419,7 +73436,7 @@ index 0977849..4a1d8f3 100644 if (rdev->irq.crtc_vblank_int[0] || rdev->irq.pflip[0]) { DRM_DEBUG("evergreen_irq_set: vblank 0\n"); -@@ -2570,7 +2658,12 @@ int evergreen_irq_set(struct radeon_device *rdev) +@@ -2570,7 +2668,12 @@ int evergreen_irq_set(struct radeon_device *rdev) grbm_int_cntl |= GUI_IDLE_INT_ENABLE; } @@ -73433,7 +73450,7 @@ index 0977849..4a1d8f3 100644 WREG32(GRBM_INT_CNTL, grbm_int_cntl); WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1); -@@ -2985,11 +3078,24 @@ restart_ih: +@@ -2985,11 +3088,24 @@ restart_ih: case 177: /* CP_INT in IB1 */ case 178: /* CP_INT in IB2 */ DRM_DEBUG("IH: CP int: 0x%08x\n", src_data); @@ -73460,7 +73477,7 @@ index 0977849..4a1d8f3 100644 break; case 233: /* GUI IDLE */ DRM_DEBUG("IH: GUI idle\n"); -@@ -3019,6 +3125,7 @@ restart_ih: +@@ -3019,6 +3135,7 @@ restart_ih: static int evergreen_startup(struct radeon_device *rdev) { @@ -73468,7 +73485,7 @@ index 0977849..4a1d8f3 100644 int r; /* enable pcie gen2 link */ -@@ -3064,7 +3171,7 @@ static int evergreen_startup(struct radeon_device *rdev) +@@ -3064,7 +3181,7 @@ static int evergreen_startup(struct radeon_device *rdev) r = evergreen_blit_init(rdev); if (r) { r600_blit_fini(rdev); @@ -73477,7 +73494,7 @@ index 0977849..4a1d8f3 100644 dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); } -@@ -3073,6 +3180,12 @@ static int evergreen_startup(struct radeon_device *rdev) +@@ -3073,6 +3190,12 @@ static int evergreen_startup(struct radeon_device *rdev) if (r) return r; @@ -73490,7 +73507,7 @@ index 0977849..4a1d8f3 100644 /* Enable IRQ */ r = r600_irq_init(rdev); if (r) { -@@ -3082,7 +3195,9 @@ static int evergreen_startup(struct radeon_device *rdev) +@@ -3082,7 +3205,9 @@ static int evergreen_startup(struct radeon_device *rdev) } evergreen_irq_set(rdev); @@ -73501,7 +73518,7 @@ index 0977849..4a1d8f3 100644 if (r) return r; r = evergreen_cp_load_microcode(rdev); -@@ -3092,6 +3207,23 @@ static int evergreen_startup(struct radeon_device *rdev) +@@ -3092,6 +3217,23 @@ static int evergreen_startup(struct radeon_device *rdev) if (r) return r; @@ -73525,7 +73542,7 @@ index 0977849..4a1d8f3 100644 return 0; } -@@ -3111,15 +3243,11 @@ int evergreen_resume(struct radeon_device *rdev) +@@ -3111,15 +3253,11 @@ int evergreen_resume(struct radeon_device *rdev) /* post card */ atom_asic_init(rdev->mode_info.atom_context); @@ -73543,7 +73560,7 @@ index 0977849..4a1d8f3 100644 return r; } -@@ -3129,13 +3257,17 @@ int evergreen_resume(struct radeon_device *rdev) +@@ -3129,13 +3267,17 @@ int evergreen_resume(struct radeon_device *rdev) int evergreen_suspend(struct radeon_device *rdev) { @@ -73563,7 +73580,7 @@ index 0977849..4a1d8f3 100644 return 0; } -@@ -3210,8 +3342,8 @@ int evergreen_init(struct radeon_device *rdev) +@@ -3210,8 +3352,8 @@ int evergreen_init(struct radeon_device *rdev) if (r) return r; @@ -73574,7 +73591,7 @@ index 0977849..4a1d8f3 100644 rdev->ih.ring_obj = NULL; r600_ih_ring_init(rdev, 64 * 1024); -@@ -3220,29 +3352,24 @@ int evergreen_init(struct radeon_device *rdev) +@@ -3220,29 +3362,24 @@ int evergreen_init(struct radeon_device *rdev) if (r) return r; @@ -73611,7 +73628,7 @@ index 0977849..4a1d8f3 100644 /* Don't start up if the MC ucode is missing on BTC parts. * The default clocks and voltages before the MC ucode -@@ -3260,15 +3387,17 @@ int evergreen_init(struct radeon_device *rdev) +@@ -3260,15 +3397,17 @@ int evergreen_init(struct radeon_device *rdev) void evergreen_fini(struct radeon_device *rdev) { @@ -85713,7 +85730,7 @@ index b6e18c8..9c6b29a 100644 tmp = RREG32_PLL(RADEON_VCLK_ECP_CNTL); tmp &= ~(RADEON_PIXCLK_ALWAYS_ONb | diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c -index 1b98338..2cad9fd 100644 +index ec36dd9..a2470d9 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c @@ -1536,9 +1536,6 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev) @@ -85854,7 +85871,7 @@ index 1b98338..2cad9fd 100644 default: DRM_INFO("Connector table: %d (invalid)\n", rdev->mode_info.connector_table); -@@ -2962,7 +2845,7 @@ bool radeon_combios_external_tmds_setup(struct drm_encoder *encoder) +@@ -2970,7 +2853,7 @@ bool radeon_combios_external_tmds_setup(struct drm_encoder *encoder) case 4: val = RBIOS16(index); index += 2; @@ -85863,7 +85880,7 @@ index 1b98338..2cad9fd 100644 break; case 6: slave_addr = id & 0xff; -@@ -3161,7 +3044,7 @@ static void combios_parse_pll_table(struct drm_device *dev, uint16_t offset) +@@ -3169,7 +3052,7 @@ static void combios_parse_pll_table(struct drm_device *dev, uint16_t offset) udelay(150); break; case 2: @@ -85872,7 +85889,7 @@ index 1b98338..2cad9fd 100644 break; case 3: while (tmp--) { -@@ -3192,13 +3075,13 @@ static void combios_parse_pll_table(struct drm_device *dev, uint16_t offset) +@@ -3200,13 +3083,13 @@ static void combios_parse_pll_table(struct drm_device *dev, uint16_t offset) /*mclk_cntl |= 0x00001111;*//* ??? */ WREG32_PLL(RADEON_MCLK_CNTL, mclk_cntl); @@ -86494,7 +86511,7 @@ index 2132109..8fb6f41 100644 struct drm_crtc *crtc_p; diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c -index bd959c1..de5e0b5 100644 +index bd959c1..68c89db 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -89,6 +89,10 @@ static const char radeon_family_name[][16] = { @@ -86519,17 +86536,7 @@ index bd959c1..de5e0b5 100644 rdev->wb.enabled = true; rdev->wb.use_event = true; } -@@ -354,8 +358,7 @@ bool radeon_card_posted(struct radeon_device *rdev) - { - uint32_t reg; - -- if (efi_enabled(EFI_BOOT) && -- rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) -+ if (efi_enabled && rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) - return false; - - /* first check CRTCs */ -@@ -721,18 +724,25 @@ int radeon_device_init(struct radeon_device *rdev, +@@ -721,18 +725,25 @@ int radeon_device_init(struct radeon_device *rdev, /* mutex initialization are all done here so we * can recall function without having locking issues */ radeon_mutex_init(&rdev->cs_mutex); @@ -86558,7 +86565,7 @@ index bd959c1..de5e0b5 100644 /* Set asic functions */ r = radeon_asic_init(rdev); -@@ -769,8 +779,14 @@ int radeon_device_init(struct radeon_device *rdev, +@@ -769,8 +780,14 @@ int radeon_device_init(struct radeon_device *rdev, r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(dma_bits)); if (r) { rdev->need_dma32 = true; @@ -86573,7 +86580,7 @@ index bd959c1..de5e0b5 100644 /* Registers mapping */ /* TODO: block userspace mapping of io register */ -@@ -818,15 +834,20 @@ int radeon_device_init(struct radeon_device *rdev, +@@ -818,15 +835,20 @@ int radeon_device_init(struct radeon_device *rdev, if (r) return r; } @@ -86595,7 +86602,7 @@ index bd959c1..de5e0b5 100644 void radeon_device_fini(struct radeon_device *rdev) { DRM_INFO("radeon: finishing device.\n"); -@@ -841,6 +862,7 @@ void radeon_device_fini(struct radeon_device *rdev) +@@ -841,6 +863,7 @@ void radeon_device_fini(struct radeon_device *rdev) rdev->rio_mem = NULL; iounmap(rdev->rmmio); rdev->rmmio = NULL; @@ -86603,7 +86610,7 @@ index bd959c1..de5e0b5 100644 } -@@ -852,7 +874,7 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) +@@ -852,7 +875,7 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) struct radeon_device *rdev; struct drm_crtc *crtc; struct drm_connector *connector; @@ -86612,7 +86619,7 @@ index bd959c1..de5e0b5 100644 if (dev == NULL || dev->dev_private == NULL) { return -ENODEV; -@@ -893,7 +915,8 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) +@@ -893,7 +916,8 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) /* evict vram memory */ radeon_bo_evict_vram(rdev); /* wait for gpu to finish processing current batch */ @@ -86622,7 +86629,7 @@ index bd959c1..de5e0b5 100644 radeon_save_bios_scratch_regs(rdev); -@@ -942,9 +965,11 @@ int radeon_resume_kms(struct drm_device *dev) +@@ -942,9 +966,11 @@ int radeon_resume_kms(struct drm_device *dev) radeon_fbdev_set_suspend(rdev, 0); console_unlock(); @@ -86636,7 +86643,7 @@ index bd959c1..de5e0b5 100644 /* reset hpd state */ radeon_hpd_init(rdev); /* blat the mode back in */ -@@ -994,36 +1019,29 @@ int radeon_gpu_reset(struct radeon_device *rdev) +@@ -994,36 +1020,29 @@ int radeon_gpu_reset(struct radeon_device *rdev) /* * Debugfs */ @@ -86679,7 +86686,7 @@ index bd959c1..de5e0b5 100644 #if defined(CONFIG_DEBUG_FS) drm_debugfs_create_files(files, nfiles, rdev->ddev->control->debugfs_root, -@@ -1035,6 +1053,22 @@ int radeon_debugfs_add_files(struct radeon_device *rdev, +@@ -1035,6 +1054,22 @@ int radeon_debugfs_add_files(struct radeon_device *rdev, return 0; } @@ -86702,7 +86709,7 @@ index bd959c1..de5e0b5 100644 #if defined(CONFIG_DEBUG_FS) int radeon_debugfs_init(struct drm_minor *minor) { -@@ -1043,11 +1077,5 @@ int radeon_debugfs_init(struct drm_minor *minor) +@@ -1043,11 +1078,5 @@ int radeon_debugfs_init(struct drm_minor *minor) void radeon_debugfs_cleanup(struct drm_minor *minor) { @@ -86715,7 +86722,7 @@ index bd959c1..de5e0b5 100644 } #endif diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c -index aec8e0c..1f50727 100644 +index 63e7143..00d9cac 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -303,8 +303,17 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id) @@ -86818,9 +86825,9 @@ index aec8e0c..1f50727 100644 return ERR_PTR(-ENOENT); } -@@ -1113,7 +1132,12 @@ radeon_user_framebuffer_create(struct drm_device *dev, - if (radeon_fb == NULL) +@@ -1115,7 +1134,12 @@ radeon_user_framebuffer_create(struct drm_device *dev, return ERR_PTR(-ENOMEM); + } - radeon_framebuffer_init(dev, radeon_fb, mode_cmd, obj); + ret = radeon_framebuffer_init(dev, radeon_fb, mode_cmd, obj); @@ -86832,7 +86839,7 @@ index aec8e0c..1f50727 100644 return &radeon_fb->base; } -@@ -1129,11 +1153,6 @@ static const struct drm_mode_config_funcs radeon_mode_funcs = { +@@ -1131,11 +1155,6 @@ static const struct drm_mode_config_funcs radeon_mode_funcs = { .output_poll_changed = radeon_output_poll_changed }; @@ -86844,7 +86851,7 @@ index aec8e0c..1f50727 100644 static struct drm_prop_enum_list radeon_tmds_pll_enum_list[] = { { 0, "driver" }, { 1, "bios" }, -@@ -1158,86 +1177,53 @@ static struct drm_prop_enum_list radeon_underscan_enum_list[] = +@@ -1160,86 +1179,53 @@ static struct drm_prop_enum_list radeon_underscan_enum_list[] = static int radeon_modeset_create_props(struct radeon_device *rdev) { @@ -86947,7 +86954,7 @@ index aec8e0c..1f50727 100644 return 0; } -@@ -1283,6 +1269,9 @@ int radeon_modeset_init(struct radeon_device *rdev) +@@ -1285,6 +1271,9 @@ int radeon_modeset_init(struct radeon_device *rdev) rdev->ddev->mode_config.max_height = 4096; } @@ -86957,7 +86964,7 @@ index aec8e0c..1f50727 100644 rdev->ddev->mode_config.fb_base = rdev->mc.aper_base; ret = radeon_modeset_create_props(rdev); -@@ -1310,9 +1299,11 @@ int radeon_modeset_init(struct radeon_device *rdev) +@@ -1312,9 +1301,11 @@ int radeon_modeset_init(struct radeon_device *rdev) return ret; } @@ -89384,7 +89391,7 @@ index b4ce864..5d8f735 100644 # define RADEON_CRTC2_VBLANK_SAVE_CLEAR (1 << 1) #define RADEON_CRTC_V_SYNC_STRT_WID 0x020c diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c -index 49d5820..cc33b3d 100644 +index 65be5e8..33eff8b 100644 --- a/drivers/gpu/drm/radeon/radeon_ring.c +++ b/drivers/gpu/drm/radeon/radeon_ring.c @@ -34,6 +34,7 @@ @@ -89419,17 +89426,31 @@ index 49d5820..cc33b3d 100644 } -void radeon_ib_bogus_cleanup(struct radeon_device *rdev) -+/* -+ * IB. -+ */ -+bool radeon_ib_try_free(struct radeon_device *rdev, struct radeon_ib *ib) - { +-{ - struct radeon_ib *ib, *n; - - list_for_each_entry_safe(ib, n, &rdev->ib_pool.bogus_ib, list) { - list_del(&ib->list); - vfree(ib->ptr); - kfree(ib); +- } +-} +- +-void radeon_ib_bogus_add(struct radeon_device *rdev, struct radeon_ib *ib) ++/* ++ * IB. ++ */ ++bool radeon_ib_try_free(struct radeon_device *rdev, struct radeon_ib *ib) + { +- struct radeon_ib *bib; +- +- bib = kmalloc(sizeof(*bib), GFP_KERNEL); +- if (bib == NULL) +- return; +- bib->ptr = vmalloc(ib->length_dw * 4); +- if (bib->ptr == NULL) { +- kfree(bib); +- return; + bool done = false; + + /* only free ib which have been emited */ @@ -89440,28 +89461,14 @@ index 49d5820..cc33b3d 100644 + done = true; + } } -+ return done; - } - --void radeon_ib_bogus_add(struct radeon_device *rdev, struct radeon_ib *ib) --{ -- struct radeon_ib *bib; -- -- bib = kmalloc(sizeof(*bib), GFP_KERNEL); -- if (bib == NULL) -- return; -- bib->ptr = vmalloc(ib->length_dw * 4); -- if (bib->ptr == NULL) { -- kfree(bib); -- return; -- } - memcpy(bib->ptr, ib->ptr, ib->length_dw * 4); - bib->length_dw = ib->length_dw; - mutex_lock(&rdev->ib_pool.mutex); - list_add_tail(&bib->list, &rdev->ib_pool.bogus_ib); - mutex_unlock(&rdev->ib_pool.mutex); --} -- ++ return done; + } + -/* - * IB. - */ @@ -89579,7 +89586,7 @@ index 49d5820..cc33b3d 100644 } void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib) -@@ -169,247 +172,258 @@ void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib) +@@ -169,250 +172,261 @@ void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib) if (tmp == NULL) { return; } @@ -89799,6 +89806,10 @@ index 49d5820..cc33b3d 100644 { int r; + /* make sure we aren't trying to allocate more space than there is on the ring */ +- if (ndw > (rdev->cp.ring_size / 4)) ++ if (ndw > (ring->ring_size / 4)) + return -ENOMEM; /* Align requested size with padding so unlock_commit can * pad safely */ - ndw = (ndw + rdev->cp.align_mask) & ~rdev->cp.align_mask; @@ -89957,7 +89968,7 @@ index 49d5820..cc33b3d 100644 if (ring_obj) { r = radeon_bo_reserve(ring_obj, false); -@@ -422,78 +436,96 @@ void radeon_ring_fini(struct radeon_device *rdev) +@@ -425,78 +439,96 @@ void radeon_ring_fini(struct radeon_device *rdev) } } @@ -91197,19 +91208,20 @@ index 0b5468b..f493c64 100644 #endif return 0; diff --git a/drivers/gpu/drm/radeon/reg_srcs/cayman b/drivers/gpu/drm/radeon/reg_srcs/cayman -index 2316977..0f656b1 100644 +index 2316977..a072fa8 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/cayman +++ b/drivers/gpu/drm/radeon/reg_srcs/cayman -@@ -1,5 +1,8 @@ +@@ -1,5 +1,9 @@ cayman 0x9400 0x0000802C GRBM_GFX_INDEX ++0x00008040 WAIT_UNTIL +0x000084FC CP_STRMOUT_CNTL +0x000085F0 CP_COHER_CNTL +0x000085F4 CP_COHER_SIZE 0x000088B0 VGT_VTX_VECT_EJECT_REG 0x000088C4 VGT_CACHE_INVALIDATION 0x000088D4 VGT_GS_VERTEX_REUSE -@@ -77,7 +80,6 @@ cayman 0x9400 +@@ -77,7 +81,6 @@ cayman 0x9400 0x0002802C DB_DEPTH_CLEAR 0x00028030 PA_SC_SCREEN_SCISSOR_TL 0x00028034 PA_SC_SCREEN_SCISSOR_BR @@ -91217,7 +91229,7 @@ index 2316977..0f656b1 100644 0x00028140 SQ_ALU_CONST_BUFFER_SIZE_PS_0 0x00028144 SQ_ALU_CONST_BUFFER_SIZE_PS_1 0x00028148 SQ_ALU_CONST_BUFFER_SIZE_PS_2 -@@ -206,7 +208,6 @@ cayman 0x9400 +@@ -206,7 +209,6 @@ cayman 0x9400 0x00028344 PA_SC_VPORT_ZMAX_14 0x00028348 PA_SC_VPORT_ZMIN_15 0x0002834C PA_SC_VPORT_ZMAX_15 @@ -91225,7 +91237,7 @@ index 2316977..0f656b1 100644 0x00028354 SX_SURFACE_SYNC 0x0002835C SX_SCATTER_EXPORT_SIZE 0x00028380 SQ_VTX_SEMANTIC_0 -@@ -508,10 +509,16 @@ cayman 0x9400 +@@ -508,10 +510,16 @@ cayman 0x9400 0x00028AA8 IA_MULTI_VGT_PARAM 0x00028AB4 VGT_REUSE_OFF 0x00028AB8 VGT_VTX_CNT_EN @@ -91243,7 +91255,7 @@ index 2316977..0f656b1 100644 0x00028B38 VGT_GS_MAX_VERT_OUT 0x00028B54 VGT_SHADER_STAGES_EN 0x00028B58 VGT_LS_HS_CONFIG -@@ -551,6 +558,18 @@ cayman 0x9400 +@@ -551,6 +559,18 @@ cayman 0x9400 0x00028C34 PA_SC_AA_SAMPLE_LOCS_PIXEL_X1_Y1_3 0x00028C38 PA_SC_AA_MASK_X0_Y0_X1_Y0 0x00028C3C PA_SC_AA_MASK_X0_Y1_X1_Y1 diff --git a/debian/patches/features/all/drm/efi-Make-efi_enabled-a-function-to-query-EFI-facilit.patch b/debian/patches/features/all/drm/efi-Make-efi_enabled-a-function-to-query-EFI-facilit.patch deleted file mode 100644 index 702f3d005..000000000 --- a/debian/patches/features/all/drm/efi-Make-efi_enabled-a-function-to-query-EFI-facilit.patch +++ /dev/null @@ -1,69 +0,0 @@ -From: Matt Fleming -Date: Wed, 14 Nov 2012 09:42:35 +0000 -Subject: efi: Make 'efi_enabled' a function to query EFI facilities - -commit 83e68189745ad931c2afd45d8ee3303929233e7f upstream. - -Originally 'efi_enabled' indicated whether a kernel was booted from -EFI firmware. Over time its semantics have changed, and it now -indicates whether or not we are booted on an EFI machine with -bit-native firmware, e.g. 64-bit kernel with 64-bit firmware. - -The immediate motivation for this patch is the bug report at, - - https://bugs.launchpad.net/ubuntu-cdimage/+bug/1040557 - -which details how running a platform driver on an EFI machine that is -designed to run under BIOS can cause the machine to become -bricked. Also, the following report, - - https://bugzilla.kernel.org/show_bug.cgi?id=47121 - -details how running said driver can also cause Machine Check -Exceptions. Drivers need a new means of detecting whether they're -running on an EFI machine, as sadly the expression, - - if (!efi_enabled) - -hasn't been a sufficient condition for quite some time. - -Users actually want to query 'efi_enabled' for different reasons - -what they really want access to is the list of available EFI -facilities. - -For instance, the x86 reboot code needs to know whether it can invoke -the ResetSystem() function provided by the EFI runtime services, while -the ACPI OSL code wants to know whether the EFI config tables were -mapped successfully. There are also checks in some of the platform -driver code to simply see if they're running on an EFI machine (which -would make it a bad idea to do BIOS-y things). - -This patch is a prereq for the samsung-laptop fix patch. - -Cc: David Airlie -Cc: Corentin Chary -Cc: Matthew Garrett -Cc: Dave Jiang -Cc: Olof Johansson -Cc: Peter Jones -Cc: Colin Ian King -Cc: Steve Langasek -Cc: Tony Luck -Cc: Konrad Rzeszutek Wilk -Cc: Rafael J. Wysocki -Signed-off-by: Matt Fleming -Signed-off-by: H. Peter Anvin -[bwh: Restricted to drivers/gpu/drm/] ---- ---- a/drivers/gpu/drm/radeon/radeon_device.c -+++ b/drivers/gpu/drm/radeon/radeon_device.c -@@ -429,7 +429,8 @@ bool radeon_card_posted(struct radeon_device *rdev) - { - uint32_t reg; - -- if (efi_enabled && rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) -+ if (efi_enabled(EFI_BOOT) && -+ rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) - return false; - - /* first check CRTCs */ diff --git a/debian/patches/series b/debian/patches/series index bcc623e8a..4a4831518 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -449,7 +449,6 @@ features/all/iguanair/0010-media-iguanair-do-not-modify-transmit-buffer.patch features/all/iguanair/0011-media-iguanair-cannot-send-data-from-the-stack.patch features/all/rt2800-add-chipset-revision-RT5390R-support.patch bugfix/all/fs-cachefiles-add-support-for-large-files-in-filesys.patch -bugfix/all/bridge-Pull-ip-header-into-skb-data-before-looking-i.patch bugfix/all/ext4-rewrite-punch-hole-to-use-ext4_ext_remove_space.patch bugfix/all/ext4-fix-hole-punch-failure-when-depth-is-greater-th.patch bugfix/all/ext4-fix-kernel-BUG-on-large-scale-rm-rf-commands.patch @@ -501,7 +500,6 @@ bugfix/x86/drm-i915-Only-increment-the-user-pin-count-after-suc.patch bugfix/x86/drm-i915-Disable-AsyncFlip-performance-optimisations.patch bugfix/x86/drm-i915-GFX_MODE-Flush-TLB-Invalidate-Mode-must-be-.patch bugfix/x86/drm-i915-dump-UTS_RELEASE-into-the-error_state.patch -features/all/drm/efi-Make-efi_enabled-a-function-to-query-EFI-facilit.patch # virtio-scsi from 3.7 features/all/virtio_scsi/0001-SCSI-virtio-scsi-SCSI-driver-for-QEMU-based-virtual-.patch