linux/drivers/gpu/drm/nouveau
Ben Skeggs 9f1feed2e1 drm/ttm: fix two regressions since move_notify changes
Both changes in dc97b3409a cause serious
regressions in the nouveau driver.

move_notify() was originally able to presume that bo->mem is the old node,
and new_mem is the new node.  The above commit moves the call to
move_notify() to after move() has been done, which means that now, sometimes,
new_mem isn't the new node at all, bo->mem is, and new_mem points at a
stale, possibly-just-been-killed-by-move node.

This is clearly not a good situation.  This patch reverts this change, and
replaces it with a cleanup in the move() failure path instead.

The second issue is that the call to move_notify() from cleanup_memtype_use()
causes the TTM ghost objects to get passed into the driver.  This is clearly
bad as the driver knows nothing about these "fake" TTM BOs, and ends up
accessing uninitialised memory.

I worked around this in nouveau's move_notify() hook by ensuring the BO
destructor was nouveau's.  I don't particularly like this solution, and
would rather TTM never pass the driver these objects.  However, I don't
clearly understand the reason why we're calling move_notify() here anyway
and am happy to work around the problem in nouveau instead of breaking the
behaviour expected by other drivers.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Jerome Glisse <j.glisse@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
2012-01-25 18:54:28 +00:00
..
Kconfig drm: fix nouveau_acpi build 2011-05-16 11:57:20 +10:00
Makefile drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nouveau_acpi.c nouveau: Support Optimus models for vga_switcheroo 2012-01-13 09:09:15 +00:00
nouveau_backlight.c drm/nva3/backlight: add suppport for newer style backlight regs 2011-09-20 16:10:06 +10:00
nouveau_bios.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nouveau_bios.h drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nouveau_bo.c drm/ttm: fix two regressions since move_notify changes 2012-01-25 18:54:28 +00:00
nouveau_calc.c
nouveau_channel.c drm/nouveau: Fix pushbufs over the 4GB mark. 2011-12-21 19:01:46 +10:00
nouveau_connector.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nouveau_connector.h drm/nouveau/disp: parse connector info directly in nouveau_connector.c 2011-12-21 19:01:41 +10:00
nouveau_crtc.h drm/nouveau/disp: kill off nouveau_crtc.mode 2011-12-21 19:01:22 +10:00
nouveau_debugfs.c drm/nouveau: Fix pushbufs over the 4GB mark. 2011-12-21 19:01:46 +10:00
nouveau_display.c drm/nouveau: move hpd enable/disable to common code 2011-12-21 19:01:46 +10:00
nouveau_dma.c drm/nouveau: Fix pushbufs over the 4GB mark. 2011-12-21 19:01:46 +10:00
nouveau_dma.h drm/nouveau: remove no_vm/mappable flags from nouveau_bo 2011-02-25 06:45:34 +10:00
nouveau_dp.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nouveau_drv.c drm/nouveau/mxm: initial implementation of dcb sanitisation 2011-12-21 19:01:41 +10:00
nouveau_drv.h nouveau: Support Optimus models for vga_switcheroo 2012-01-13 09:09:15 +00:00
nouveau_encoder.h drm/nouveau/dp: enable down-spread if vbios and sink support it 2011-09-20 16:10:35 +10:00
nouveau_fb.h drm/nouveau: move master modesetting init to nouveau_display 2011-12-21 19:01:16 +10:00
nouveau_fbcon.c drm/nouveau: re-jig fbcon suspend/resume process a little 2011-12-21 19:01:34 +10:00
nouveau_fbcon.h
nouveau_fence.c drm/nouveau: initialize chan->fence.lock before use 2011-11-10 08:58:53 +10:00
nouveau_gem.c Revert "drm/ttm: add a way to bo_wait for either the last read or last write" 2011-10-27 18:28:37 +02:00
nouveau_gpio.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nouveau_gpio.h drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nouveau_grctx.h drm/nouveau: Fix missing whitespace checkpatch.pl errors. 2011-05-16 10:47:25 +10:00
nouveau_hdmi.c drm/nouveau/hdmi: enable audio for nva3:nvd0 chipsets 2011-12-21 19:01:31 +10:00
nouveau_hw.c drm/nv17-nv40: Fix modesetting failure when pitch == 4096px (fdo bug 35901). 2011-06-07 09:22:29 +10:00
nouveau_hw.h
nouveau_hwsq.h drm/nouveau/hwsq: remove some magic, give proper opcode names 2011-12-21 19:01:44 +10:00
nouveau_i2c.c drm/nouveau/i2c: handle bit-banging ourselves 2011-12-21 19:01:41 +10:00
nouveau_i2c.h drm/nouveau/i2c: handle bit-banging ourselves 2011-12-21 19:01:41 +10:00
nouveau_ioc32.c
nouveau_irq.c drm/nouveau: detect disabled device in irq handler and return IRQ_NONE 2011-07-25 09:42:09 +10:00
nouveau_mem.c drm/nouveau/bios: pass drm_device to ROMPTR, rather than nvbios 2011-12-21 19:01:39 +10:00
nouveau_mm.c drm/nouveau: allow a nouveau_mm to be created with holes 2011-09-20 16:04:00 +10:00
nouveau_mm.h drm/nouveau: allow a nouveau_mm to be created with holes 2011-09-20 16:04:00 +10:00
nouveau_mxm.c drm/nouveau/mxm: implement ROM shadow method 2011-12-21 19:01:43 +10:00
nouveau_notifier.c drm/nouveau: Fix notifier blocks over the 4GB mark. 2011-12-21 19:01:47 +10:00
nouveau_object.c drm/nvd0/disp: add support for page flipping 2011-12-21 19:01:37 +10:00
nouveau_perf.c drm/nouveau/bios: pass drm_device to ROMPTR, rather than nvbios 2011-12-21 19:01:39 +10:00
nouveau_pm.c drm/nouveau/pm: fix build with HWMON off 2012-01-10 10:13:16 +00:00
nouveau_pm.h drm/nvc0/pm: initial engine reclocking 2011-12-21 19:01:46 +10:00
nouveau_ramht.c drm/nv50-nvc0: fix ramht entries for multiple evo channels 2011-02-25 06:44:48 +10:00
nouveau_ramht.h
nouveau_reg.h drm/nva3/backlight: add suppport for newer style backlight regs 2011-09-20 16:10:06 +10:00
nouveau_sgdma.c drm/ttm: isolate dma data from ttm_tt V4 2011-12-06 10:40:02 +00:00
nouveau_state.c nouveau: Support Optimus models for vga_switcheroo 2012-01-13 09:09:15 +00:00
nouveau_temp.c drm/nouveau/i2c: do parsing of i2c-related vbios info in nouveau_i2c.c 2011-12-21 19:01:40 +10:00
nouveau_ttm.c
nouveau_util.c drm/nouveau: add nouveau_enum_find() util function 2011-03-14 16:31:50 +10:00
nouveau_util.h drm/nouveau: add nouveau_enum_find() util function 2011-03-14 16:31:50 +10:00
nouveau_vm.c drm/nouveau/ttm: fix crash as a result of a recent ttm change 2011-12-22 15:23:25 +10:00
nouveau_vm.h drm/nouveau/ttm: fix crash as a result of a recent ttm change 2011-12-22 15:23:25 +10:00
nouveau_volt.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nv04_crtc.c drm: Replace pitch with pitches[] in drm_framebuffer 2011-12-20 10:06:27 +00:00
nv04_cursor.c
nv04_dac.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nv04_dfp.c drm/nv04/disp: handle dual-link spwg panels without needing quirks 2011-12-21 19:01:43 +10:00
nv04_display.c drm/nouveau: move hpd enable/disable to common code 2011-12-21 19:01:46 +10:00
nv04_fb.c
nv04_fbcon.c
nv04_fifo.c drm/nv50: check for vm traps on every gr irq 2011-03-14 16:32:30 +10:00
nv04_graph.c drm/nouveau/gr: disable fifo access and idle before suspend ctx unload 2011-07-25 09:43:38 +10:00
nv04_instmem.c DRM: remove drm_pci_device_is_pcie 2011-07-13 08:14:52 +01:00
nv04_mc.c
nv04_pm.c drm/nv04-nv30/pm: port to newer interfaces 2011-12-21 19:01:24 +10:00
nv04_timer.c drm/nouveau/pm: remove the older interfaces completely 2011-12-21 19:01:25 +10:00
nv04_tv.c
nv10_fb.c
nv10_fifo.c
nv10_gpio.c drm/nv40/disp: implement support for hotplug irq 2011-12-21 19:01:45 +10:00
nv10_graph.c drm/nouveau/gr: disable fifo access and idle before suspend ctx unload 2011-07-25 09:43:38 +10:00
nv17_tv_modes.c
nv17_tv.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nv17_tv.h
nv20_graph.c drm/nouveau/gr: disable fifo access and idle before suspend ctx unload 2011-07-25 09:43:38 +10:00
nv30_fb.c
nv31_mpeg.c drm/nv31/mpeg: support for a single class3174 user 2011-09-20 16:03:44 +10:00
nv40_fb.c
nv40_fifo.c drm/nv40/vpe: add support for PMPEG 2011-05-16 10:48:56 +10:00
nv40_graph.c drm/nouveau: pass flag to engine fini() method on suspend 2011-07-25 09:43:22 +10:00
nv40_grctx.c
nv40_mc.c
nv40_pm.c drm/nouveau: just pass gpio line to pwm_*, not entire gpio struct 2011-12-21 19:01:44 +10:00
nv50_calc.c drm/nva3/clk: better pll calculation when no fractional fb div available 2011-05-16 10:50:59 +10:00
nv50_crtc.c drm/nv50/disp: fix scaling of doublescan modes 2011-12-21 19:01:23 +10:00
nv50_cursor.c drm/nouveau: make general drm modesetting init common 2011-09-20 16:05:04 +10:00
nv50_dac.c drm/nv50/disp: disconnect encoders before reprogramming them 2011-12-21 19:01:19 +10:00
nv50_display.c drm/nouveau: move hpd enable/disable to common code 2011-12-21 19:01:46 +10:00
nv50_display.h drm/nv50/disp: fix evo for create/init + destroy/fini split 2011-12-21 19:01:34 +10:00
nv50_evo.c drm/nv50/disp: fix evo for create/init + destroy/fini split 2011-12-21 19:01:34 +10:00
nv50_evo.h drm/nv50-nvc0: initialise display sync channels 2011-02-25 06:45:11 +10:00
nv50_fb.c drm/nv50: check for vm traps on every gr irq 2011-03-14 16:32:30 +10:00
nv50_fbcon.c drm/nv50-nvc0: explicitly map fbcon fb into channel vm 2011-06-23 15:59:59 +10:00
nv50_fifo.c drm/nouveau: Fix pushbufs over the 4GB mark. 2011-12-21 19:01:46 +10:00
nv50_gpio.c drm/nouveau/gpio: reimplement as nouveau_gpio.c, fixing a number of issues 2011-12-21 19:01:45 +10:00
nv50_graph.c drm/nv50: also report errors in MP1/MP2 when they happen. 2011-12-21 19:01:17 +10:00
nv50_grctx.c drm/nv50: fix stability issue on NV86. 2011-11-10 08:58:57 +10:00
nv50_instmem.c drm/nouveau: will need to specify channel for vm-ful gpuobj allocations 2011-06-23 15:59:18 +10:00
nv50_mc.c
nv50_mpeg.c drm/nouveau: pass flag to engine fini() method on suspend 2011-07-25 09:43:22 +10:00
nv50_pm.c drm/nouveau: just pass gpio line to pwm_*, not entire gpio struct 2011-12-21 19:01:44 +10:00
nv50_sor.c drm/nouveau/disp: kill off nouveau_crtc.mode 2011-12-21 19:01:22 +10:00
nv50_vm.c drm/nv50: fix page faulting for 128MB page table sizes 2011-12-21 19:01:31 +10:00
nv50_vram.c drm/nv50/vram: fix incorrect detection of bank count on newer chipsets 2011-11-10 08:58:47 +10:00
nv84_bsp.c drm/nouveau/vdec: implement stub modules for the known engines 2011-12-21 19:01:10 +10:00
nv84_crypt.c drm/nouveau: pass flag to engine fini() method on suspend 2011-07-25 09:43:22 +10:00
nv84_vp.c drm/nouveau/vdec: implement stub modules for the known engines 2011-12-21 19:01:10 +10:00
nv98_crypt.c drm/nouveau/vdec: implement stub modules for the known engines 2011-12-21 19:01:10 +10:00
nv98_ppp.c drm/nouveau/vdec: implement stub modules for the known engines 2011-12-21 19:01:10 +10:00
nva3_copy.c drm/nouveau: pass flag to engine fini() method on suspend 2011-07-25 09:43:22 +10:00
nva3_copy.fuc drm/nva3/copy: fix typo in fuc which caused host to not recieve exceptions 2011-12-21 19:01:30 +10:00
nva3_copy.fuc.h drm/nva3/copy: fix typo in fuc which caused host to not recieve exceptions 2011-12-21 19:01:30 +10:00
nva3_pm.c drm/nouveau/pm: make clocks_set return an error code clocks_set can fail. 2011-12-21 19:01:23 +10:00
nvc0_copy.c drm/nouveau: pass flag to engine fini() method on suspend 2011-07-25 09:43:22 +10:00
nvc0_copy.fuc.h drm/nva3/copy: fix typo in fuc which caused host to not recieve exceptions 2011-12-21 19:01:30 +10:00
nvc0_fb.c drm/nvc0/fb: slightly improve PMFB intr handling, move out of nvc0_graph.c 2011-09-20 16:12:21 +10:00
nvc0_fbcon.c drm/nv50-nvc0: explicitly map notifier bo into channel vm 2011-06-23 16:00:04 +10:00
nvc0_fifo.c drm/nvc0/fifo: avoid touching missing subfifos 2011-09-20 16:12:18 +10:00
nvc0_graph.c drm/nvc0/gr: add initial support for nvd9, not quite there yet.. 2011-12-21 19:01:27 +10:00
nvc0_graph.fuc drm/nvc0/gr: update fuc source to assemble with latest envyas 2011-12-21 19:01:26 +10:00
nvc0_graph.h drm/nvc0/gr: add initial support for nvd9, not quite there yet.. 2011-12-21 19:01:27 +10:00
nvc0_grctx.c drm/nvc0/gr: add initial support for nvd9, not quite there yet.. 2011-12-21 19:01:27 +10:00
nvc0_grgpc.fuc drm/nvc0/gr: add initial support for nvd9, not quite there yet.. 2011-12-21 19:01:27 +10:00
nvc0_grgpc.fuc.h drm/nvc0/gr: add initial support for nvd9, not quite there yet.. 2011-12-21 19:01:27 +10:00
nvc0_grhub.fuc drm/nvc0/gr: add initial support for nvd9, not quite there yet.. 2011-12-21 19:01:27 +10:00
nvc0_grhub.fuc.h drm/nvc0/gr: add initial support for nvd9, not quite there yet.. 2011-12-21 19:01:27 +10:00
nvc0_instmem.c drm/nvc0: enable per-client address spaces 2011-06-23 16:01:41 +10:00
nvc0_pm.c drm/nvc0/pm: initial engine reclocking 2011-12-21 19:01:46 +10:00
nvc0_vm.c drm/nv50-nvc0/vm: don't touch chan_vm 2011-06-23 15:58:40 +10:00
nvc0_vram.c drm/nvc0/vram: skip disabled PBFB subunits 2011-11-10 09:00:02 +10:00
nvd0_display.c drm/nouveau/disp: parse connector info directly in nouveau_connector.c 2011-12-21 19:01:41 +10:00
nvreg.h drm/nv17-nv40: Fix modesetting failure when pitch == 4096px (fdo bug 35901). 2011-06-07 09:22:29 +10:00