Update to 3.2.39

and update drm, agp to 3.4.32

svn path=/dists/sid/linux/; revision=19828
This commit is contained in:
Ben Hutchings 2013-02-20 05:16:43 +00:00
parent bf347b2893
commit 9fd3664528
5 changed files with 149 additions and 205 deletions

39
debian/changelog vendored
View File

@ -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.

View File

@ -1,30 +0,0 @@
From: Sarveshwar Bandi <sarveshwar.bandi@emulex.com>
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 <sarveshwar.bandi@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
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);

View File

@ -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 <linux/kernel.h>
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

View File

@ -1,69 +0,0 @@
From: Matt Fleming <matt.fleming@intel.com>
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 <airlied@linux.ie>
Cc: Corentin Chary <corentincj@iksaif.net>
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: Olof Johansson <olof@lixom.net>
Cc: Peter Jones <pjones@redhat.com>
Cc: Colin Ian King <colin.king@canonical.com>
Cc: Steve Langasek <steve.langasek@canonical.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Konrad Rzeszutek Wilk <konrad@kernel.org>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
[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 */

View File

@ -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