On 10.11.2015 17:25, Mario Kleiner wrote: > On 11/10/2015 05:00 PM, Thierry Reding wrote: >> On Tue, Nov 10, 2015 at 03:54:52PM +0100, Mario Kleiner wrote: >>> From: Daniel Vetter <daniel.vetter@xxxxxxxx> >>> >>> Apparently pre-nv50 pageflip events happen before the actual vblank >>> period. Therefore that functionality got semi-disabled in >>> >>> commit af4870e406126b7ac0ae7c7ce5751f25ebe60f28 >>> Author: Mario Kleiner <mario.kleiner.de@xxxxxxxxx> >>> Date: Tue May 13 00:42:08 2014 +0200 >>> >>> drm/nouveau/kms/nv04-nv40: fix pageflip events via special case. >>> >>> Unfortunately that hack got uprooted in >>> >>> commit cc1ef118fc099295ae6aabbacc8af94d8d8885eb >>> Author: Thierry Reding <treding@xxxxxxxxxx> >>> Date: Wed Aug 12 17:00:31 2015 +0200 >>> >>> drm/irq: Make pipe unsigned and name consistent >>> >>> Trigering a warning when trying to sample the vblank timestamp for a >>> non-existing pipe. There's a few ways to fix this: >>> >>> - Open-code the old behaviour, which just enshrines this slight >>> breakage of the userspace ABI. >>> >>> - Revert Mario's commit and again inflict broken timestamps, again not >>> pretty. >>> >>> - Fix this for real by delaying the pageflip TS until the next vblank >>> interrupt, thereby making it accurate. >>> >>> This patch implements the third option. Since having a page flip >>> interrupt that happens when the pageflip gets armed and not when it >>> completes in the next vblank seems to be fairly common (older i915 hw >>> works very similarly) create a new helper to arm vblank events for >>> such drivers. >>> >>> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=106431 >>> Cc: Thierry Reding <treding@xxxxxxxxxx> >>> Cc: Mario Kleiner <mario.kleiner.de@xxxxxxxxx> >>> Cc: Ben Skeggs <bskeggs@xxxxxxxxxx> >>> Cc: Ilia Mirkin <imirkin@xxxxxxxxxxxx> >>> >>> v2 (mario): Integrate my own review comments into Daniels patch. >>> - Fix function prototypes in drmP.h >>> - Add missing vblank_put() for pageflip completion without >>> pageflip event. >>> - Initialize sequence number for queued pageflip event to avoidng >>> trouble in drm_handle_vblank_events(). >>> - Remove dead code and spelling fix. >>> >>> v3 (mario): Add a signed-off-by and cc stable tag per Ilja's advice. >>> >>> Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> >>> (v1) Reviewed-by: Mario Kleiner <mario.kleiner.de@xxxxxxxxx> >>> (v2/v3) Signed-off-by: Mario Kleiner <mario.kleiner.de@xxxxxxxxx> >>> >>> Cc: stable@xxxxxxxxxxxxxxx # v4.3 >>> --- >>> drivers/gpu/drm/drm_irq.c | 54 ++++++++++++++++++++++++++++++- >>> drivers/gpu/drm/nouveau/nouveau_display.c | 19 ++++++----- >>> include/drm/drmP.h | 4 +++ >>> 3 files changed, 68 insertions(+), 9 deletions(-) >> >> This looks good to me. Let me clean this up a little and submit it to >> Dave. >> >> Thierry >> > > Btw., if somebody has a functional old card for testing this, it should > be easy to verify if it works on pre-nv50. If it would not work it would > deliver the pageflip event 1 frame delayed, so at least on standard > nouveau + default DRI2 + default double-buffering the rate for a tight > loop of page-flipped swaps should go down to 30 fps on a 60 Hz display, > quite noticeable. Afaik we also have Piglit tests for OML_sync_control > which would likely fail if this would be broken. > > Oh and if someone has tips on how to resurrect an old nv-40 PC (booted > with BIOS only) graphics card in a MacPro (EFI boot), i wouldn't mind > hearing them. It would be nice to still be able to use that card for > testing. > > thanks, > -mario ------------[ cut here ]------------ WARNING: CPU: 0 PID: 313 at lib/dma-debug.c:1205 check_sync+0x169/0x6e0() nouveau 0000:01:00.0: DMA-API: device driver tries to sync DMA memory it has not allocated [device address=0x00000000c0bf6468] [size=4096 bytes] Modules linked in: nouveau(+) ... CPU: 0 PID: 313 Comm: systemd-udevd Not tainted 4.3.0-3.fc22.i686+debug #1 ... Call Trace: [<c078a28f>] dump_stack+0x48/0x69 [<c0461fc7>] warn_slowpath_common+0x87/0xc0 [<c07b9029>] ? check_sync+0x169/0x6e0 [<c07b9029>] ? check_sync+0x169/0x6e0 [<c046203e>] warn_slowpath_fmt+0x3e/0x60 [<c07b9029>] check_sync+0x169/0x6e0 [<c07b96ad>] debug_dma_sync_single_for_device+0x7d/0x90 [<f7ece298>] ? ttm_bo_del_sub_from_lru+0x18/0x50 [ttm] [<c040bef0>] ? text_poke_bp+0xd0/0xd0 [<f85d96db>] nouveau_bo_sync_for_device+0x8b/0xa0 [nouveau] [<f85d97c4>] nouveau_bo_validate+0x34/0x40 [nouveau] [<f85d9958>] nouveau_bo_pin+0x188/0x290 [nouveau] [<f85d7fe0>] ? nv10_bo_put_tile_region+0x80/0x80 [nouveau] [<f85ec7fd>] nouveau_channel_prep+0xfd/0x2c0 [nouveau] [<f85eca17>] nouveau_channel_new+0x57/0x7a0 [nouveau] [<c05da57c>] ? kfree+0xdc/0x280 [<f8540082>] ? nvif_object_sclass_put+0x12/0x20 [nouveau] [<f85d5666>] nouveau_drm_load+0x596/0x8d0 [nouveau] [<c04bc14c>] ? trace_hardirqs_on_caller+0x12c/0x1d0 [<f7e8bfe9>] ? drm_minor_register+0x89/0x120 [drm] [<f7e8c116>] drm_dev_register+0x96/0xa0 [drm] [<f7e8ece9>] drm_get_pci_dev+0x79/0x1c0 [drm] [<c07d973e>] ? pcibios_set_master+0x4e/0xa0 [<f85d5b8e>] nouveau_drm_probe+0x1ee/0x220 [nouveau] [<c07dbf3b>] pci_device_probe+0x7b/0xf0 [<c08bf366>] ? devices_kset_move_last+0x56/0xa0 [<c08c2de4>] driver_probe_device+0x204/0x490 [<c08c30bc>] ? __driver_attach+0x4c/0x90 [<c07dbc02>] ? pci_match_device+0xd2/0x100 [<c08c30f1>] __driver_attach+0x81/0x90 [<c08c3070>] ? driver_probe_device+0x490/0x490 [<c08c0b97>] bus_for_each_dev+0x57/0xa0 [<c08c25ce>] driver_attach+0x1e/0x20 [<c08c3070>] ? driver_probe_device+0x490/0x490 [<c08c214f>] bus_add_driver+0x1ef/0x290 [<c08c3bdd>] driver_register+0x5d/0xf0 [<c07da71a>] __pci_register_driver+0x4a/0x50 [<f7e8ef0d>] drm_pci_init+0xdd/0x100 [drm] [<f7f211f9>] nouveau_drm_init+0x1f9/0x1000 [nouveau] [<f7f21000>] ? 0xf7f21000 [<c040047a>] do_one_initcall+0xaa/0x200 [<f7f21000>] ? 0xf7f21000 [<c04dae42>] ? rcu_read_lock_sched_held+0x42/0x80 [<c05daf0d>] ? kmem_cache_alloc_trace+0x23d/0x310 [<c0582dd1>] ? do_init_module+0x21/0x1b7 [<c0582dd1>] ? do_init_module+0x21/0x1b7 [<c0582e00>] do_init_module+0x50/0x1b7 [<c05036ec>] load_module+0x1ebc/0x2550 [<c0b993d7>] ? _raw_spin_unlock_irq+0x27/0x40 [<c048e6aa>] ? finish_task_switch+0x8a/0x1d0 [<c0503ec7>] SyS_init_module+0x147/0x1a0 [<c04012c4>] ? do_audit_syscall_entry.isra.9+0x44/0x50 [<c0401627>] ? syscall_trace_enter_phase1+0x107/0x130 [<c0b99f05>] syscall_call+0x7/0x7 ---[ end trace d3c14159641a1388 ]--- NV34 tested with 4.3.0-3.fc22.i686 i.e. 4.3.0-1.fc24.i686 & drm-nouveau-Fix-pre-nv50-pageflip-events-v4.patch http://koji.fedoraproject.org/koji/buildinfo?buildID=695636 https://patchwork.kernel.org/patch/7591531/mbox _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel