[PATCH 00/13] fbdev locking rework and deferred setup, take 2

Daniel Vetter daniel at ffwll.ch
Wed Jun 28 07:36:03 UTC 2017


On Tue, Jun 27, 2017 at 04:02:02PM -0700, John Stultz wrote:
> On Tue, Jun 27, 2017 at 7:59 AM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> >
> > Thanks to Liviu's help I realized that I fumbled the locking rework completely.
> > This one here should be better, but somehow I'm having a real bad day today and
> > I spent all day typing shit code, and then making it worse.
> >
> > This here seems to work at first glance, but please test and review carefully.
> 
> After some self-caused testing pain (somehow missed picking one of the
> patches in mutt), I managed to get these tested w/ HiKey against
> 4.12-rc7.
> 
> Things seemed to work fairly well.
> 
> Though the one quirk I saw was that previously if I booted the device
> w/o HDMI plugged in, it would boot up defaulting to 1024x768
> resolution, and when I plugged in the HDMI cable, the monitor would
> start up and use that resolution.
> 
> With your patchset, if I boot without the monitor attached,  it seems
> no fb is created, so surfaceflinger crashes repeatedly trying to start
> up.  Then when I do plug the montior in, I get the following crash:
> 
> [  106.503724] Unable to handle kernel NULL pointer dereference at
> virtual address 00000038
> [  106.512050] pgd = ffffff8008e89000
> [  106.515596] [00000038] *pgd=0000000077ffe003,
> *pud=0000000077ffe003, *pmd=0000000000000000
> [  106.524050] Internal error: Oops: 96000005 [#1] PREEMPT SMP
> [  106.529678] CPU: 2 PID: 1184 Comm: kworker/2:2 Tainted: G        W
>      4.12.0-rc7-00093-g42439fe-dirty #3054
> [  106.539711] Hardware name: HiKey Development Board (DT)
> [  106.544996] Workqueue: events adv7511_hpd_work
> [  106.549484] task: ffffffc0753c3e80 task.stack: ffffffc074b0c000
> [  106.555449] PC is at drm_sysfs_hotplug_event+0x34/0x58
> [  106.560624] LR is at drm_sysfs_hotplug_event+0x34/0x58
> [  106.565796] pc : [<ffffff8008536634>] lr : [<ffffff8008536634>]
> pstate: 40000145
> [  106.573221] sp : ffffffc074b0fd40
> [  106.576562] x29: ffffffc074b0fd40 x28: 0000000000000000
> [  106.581925] x27: ffffffc005f93d20 x26: ffffffc074d387b8
> [  106.587288] x25: ffffffc0753c3e80 x24: ffffffc0747e3258
> [  106.592650] x23: 0000000000000000 x22: ffffffc077f44a80
> [  106.598012] x21: ffffffc077f46900 x20: ffffffc07441cd00
> [  106.603373] x19: 0000000000000000 x18: 0000000000000000
> [  106.608733] x17: 0000000000000000 x16: 0000000000000000
> [  106.614093] x15: 00000018cc1b97ed x14: 0000000000000000
> [  106.619453] x13: 0000000000000000 x12: 0000000000000000
> [  106.624813] x11: 00000000000002e5 x10: 0000000000000880
> [  106.630173] x9 : ffffffc074b0fa10 x8 : ffffffc0753c4760
> [  106.635534] x7 : ffffffc077f3ec80 x6 : ffffffc077f3c090
> [  106.640895] x5 : ffffff8008da0568 x4 : 0000000000000000
> [  106.646254] x3 : 0000000000000000 x2 : ffffff8008c39d90
> [  106.651613] x1 : 0000000000000001 x0 : ffffff8008c02fe8
> [  106.656981] Process kworker/2:2 (pid: 1184, stack limit = 0xffffffc074b0c000)
> [  106.664152] Stack: (0xffffffc074b0fd40 to 0xffffffc074b10000)
> [  106.669940] fd40: ffffffc074b0fd70 ffffff800851d1ec
> 0000000000000000 ffffff80085c7b04
> [  106.677813] fd60: ffffff8008c39d80 0000000000000000
> ffffffc074b0fd90 ffffff8008550bd4
> [  106.685687] fd80: ffffffc0747e3018 ffffff80080df688
> ffffffc074b0fdc0 ffffff80080d0814
> [  106.693561] fda0: 0000000000000000 ffffff8008a45eb8
> ffffffc074b0fdc0 000000d0080d0808
> [  106.701436] fdc0: ffffffc074b0fe00 ffffff80080d0a68
> ffffffc07441cd00 ffffffc074a83a00
> [  106.709310] fde0: ffffffc077f44a80 ffffffc07441cd30
> ffffff8008d46000 ffffffc077f44aa0
> [  106.717184] fe00: ffffffc074b0fe60 ffffff80080d6974
> ffffffc074d38780 ffffffc074a83a00
> [  106.725059] fe20: ffffff8008df9160 ffffffc0753c3e80
> ffffff8008bf9528 ffffffc07441cd00
> [  106.732929] fe40: ffffff80080d0a20 ffffffc074d387b8
> ffffffc005f93d20 0000000000000000
> [  106.740801] fe60: 0000000000000000 ffffff8008082ec0
> ffffff80080d6878 ffffffc074a83a00
> [  106.748671] fe80: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.756541] fea0: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.764411] fec0: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.772281] fee0: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.780151] ff00: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.788021] ff20: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.795889] ff40: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.803759] ff60: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.811629] ff80: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.819475] ffa0: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.827308] ffc0: 0000000000000000 0000000000000005
> 0000000000000000 0000000000000000
> [  106.835143] ffe0: 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000
> [  106.842974] Call trace:
> [  106.845422] Exception stack(0xffffffc074b0fb70 to 0xffffffc074b0fca0)
> [  106.851866] fb60:
> 0000000000000000 0000008000000000
> [  106.859701] fb80: ffffffc074b0fd40 ffffff8008536634
> ffffffc074b0fba0 ffffff80085b6d88
> [  106.867535] fba0: ffffffc074b0fbd0 ffffff8008700f4c
> ffffffc0747e2818 0000000000000002
> [  106.875370] fbc0: ffffffc0747e28b8 0000000000000002
> ffffffc074b0fc20 ffffff80086fd5dc
> [  106.883205] fbe0: ffffffc0747e28b8 0000000000000001
> 0000000000000002 ffffffc074b0fca0
> [  106.891039] fc00: ffffffc074b0fc50 ffffff80086fb5c8
> ffffff8008c02fe8 0000000000000001
> [  106.898872] fc20: ffffff8008c39d90 0000000000000000
> 0000000000000000 ffffff8008da0568
> [  106.906706] fc40: ffffffc077f3c090 ffffffc077f3ec80
> ffffffc0753c4760 ffffffc074b0fa10
> [  106.914540] fc60: 0000000000000880 00000000000002e5
> 0000000000000000 0000000000000000
> [  106.922374] fc80: 0000000000000000 00000018cc1b97ed
> 0000000000000000 0000000000000000
> [  106.930209] [<ffffff8008536634>] drm_sysfs_hotplug_event+0x34/0x58
> [  106.936397] [<ffffff800851d1ec>] drm_kms_helper_hotplug_event+0x14/0x38
> [  106.943015] [<ffffff8008550bd4>] adv7511_hpd_work+0x4c/0x60
> [  106.948594] [<ffffff80080d0814>] process_one_work+0x114/0x320
> [  106.954344] [<ffffff80080d0a68>] worker_thread+0x48/0x428
> [  106.959748] [<ffffff80080d6974>] kthread+0xfc/0x128
> [  106.964632] [<ffffff8008082ec0>] ret_from_fork+0x10/0x50
> [  106.969949] Code: 913fa020 52800021 a9027fa3 97fff898 (f9401e60)
> [  106.976112] ---[ end trace dd098614ee129219 ]---
> [  107.016693] Kernel panic - not syncing: Fatal exception
> 
> 
> I've got to dig a bit more here (probably something is wrong with the
> bridge driver), but let me know if the lack of the 1024x768 default fb
> is expected.

That's the entire point of the deferred setup trick - only once you plug
in the first output will we create the fbdev (because the framebuffer for
that stuff is static, because fbdev doesn't allow remapping and moving).
Oops otoh isn't what should happen.

Since I don't do arm, can you pls explain where/how it blew up? Only quick
guess I have is that adv7511->connector.dev is NULL in adv7511_hpd_work,
which would indeed be a bug in your bridge. Or the driver load sequence of
your driver, handling hotplug before the connector is fully registered
isn't a good idea.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list