From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Date: Wed, 04 Jul 2018 08:40:33 +0000 Subject: Re: [PATCH] fb: fix lost console when the user unplugs a USB adapter Message-Id: <20180704084033.GO3891@phenom.ffwll.local> List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Mikulas Patocka Cc: linux-fbdev@vger.kernel.org, Ladislav Michl , Bartlomiej Zolnierkiewicz , Bernie Thompson , dri-devel@lists.freedesktop.org, Dave Airlie On Sun, Jun 03, 2018 at 11:46:29AM -0400, Mikulas Patocka wrote: > I have a USB display adapter using the udlfb driver and I use it on an ARM > board that doesn't have any graphics card. When I plug the adapter in, the > console is properly displayed, however when I unplug and re-plug the > adapter, the console is not displayed and I can't access it until I reboot > the board. > > The reason is this: > When the adapter is unplugged, dlfb_usb_disconnect calls > unlink_framebuffer, then it waits until the reference count drops to zero > and then it deallocates the framebuffer. However, the console that is > attached to the framebuffer device keeps the reference count non-zero, so > the framebuffer device is never destroyed. When the USB adapter is plugged > again, it creates a new device /dev/fb1 and the console is not attached to > it. > > This patch fixes the bug by unbinding the console from unlink_framebuffer. > The code to unbind the console is moved from do_unregister_framebuffer to > a function unbind_console. When the console is unbound, the reference > count drops to zero and the udlfb driver frees the framebuffer. When the > adapter is plugged back, a new framebuffer is created and the console is > attached to it. > > Signed-off-by: Mikulas Patocka > Cc: stable@vger.kernel.org Does this work correctly with the udl drm driver and the drm fbdev emulation? If yes I'm not sure what the value is in fixing up the uldfb driver really ... Same for all the uldfb fixes in your other series. If the 2 drivers are on feature parity I'd just go ahead and remove the uldfb one. -Daniel > > --- > drivers/video/fbdev/core/fbmem.c | 21 +++++++++++++++++---- > 1 file changed, 17 insertions(+), 4 deletions(-) > > Index: linux-4.16.12/drivers/video/fbdev/core/fbmem.c > =================================> --- linux-4.16.12.orig/drivers/video/fbdev/core/fbmem.c 2018-05-26 06:13:20.000000000 +0200 > +++ linux-4.16.12/drivers/video/fbdev/core/fbmem.c 2018-05-26 06:13:20.000000000 +0200 > @@ -1805,12 +1805,12 @@ static int do_register_framebuffer(struc > return 0; > } > > -static int do_unregister_framebuffer(struct fb_info *fb_info) > +static int unbind_console(struct fb_info *fb_info) > { > struct fb_event event; > - int i, ret = 0; > + int ret; > + int i = fb_info->node; > > - i = fb_info->node; > if (i < 0 || i >= FB_MAX || registered_fb[i] != fb_info) > return -EINVAL; > > @@ -1825,6 +1825,16 @@ static int do_unregister_framebuffer(str > unlock_fb_info(fb_info); > console_unlock(); > > + return ret; > +} > + > +static int do_unregister_framebuffer(struct fb_info *fb_info) > +{ > + struct fb_event event; > + int ret; > + > + ret = unbind_console(fb_info); > + > if (ret) > return -EINVAL; > > @@ -1835,7 +1845,7 @@ static int do_unregister_framebuffer(str > (fb_info->pixmap.flags & FB_PIXMAP_DEFAULT)) > kfree(fb_info->pixmap.addr); > fb_destroy_modelist(&fb_info->modelist); > - registered_fb[i] = NULL; > + registered_fb[fb_info->node] = NULL; > num_registered_fb--; > fb_cleanup_device(fb_info); > event.info = fb_info; > @@ -1860,6 +1870,9 @@ int unlink_framebuffer(struct fb_info *f > device_destroy(fb_class, MKDEV(FB_MAJOR, i)); > fb_info->dev = NULL; > } > + > + unbind_console(fb_info); > + > return 0; > } > EXPORT_SYMBOL(unlink_framebuffer); > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] fb: fix lost console when the user unplugs a USB adapter Date: Wed, 4 Jul 2018 10:40:33 +0200 Message-ID: <20180704084033.GO3891@phenom.ffwll.local> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2A5FF6EAE6 for ; Wed, 4 Jul 2018 08:40:37 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id r17-v6so3457121edo.13 for ; Wed, 04 Jul 2018 01:40:37 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mikulas Patocka Cc: linux-fbdev@vger.kernel.org, Ladislav Michl , Bartlomiej Zolnierkiewicz , Bernie Thompson , dri-devel@lists.freedesktop.org, Dave Airlie List-Id: dri-devel@lists.freedesktop.org T24gU3VuLCBKdW4gMDMsIDIwMTggYXQgMTE6NDY6MjlBTSAtMDQwMCwgTWlrdWxhcyBQYXRvY2th IHdyb3RlOgo+IEkgaGF2ZSBhIFVTQiBkaXNwbGF5IGFkYXB0ZXIgdXNpbmcgdGhlIHVkbGZiIGRy aXZlciBhbmQgSSB1c2UgaXQgb24gYW4gQVJNCj4gYm9hcmQgdGhhdCBkb2Vzbid0IGhhdmUgYW55 IGdyYXBoaWNzIGNhcmQuIFdoZW4gSSBwbHVnIHRoZSBhZGFwdGVyIGluLCB0aGUKPiBjb25zb2xl IGlzIHByb3Blcmx5IGRpc3BsYXllZCwgaG93ZXZlciB3aGVuIEkgdW5wbHVnIGFuZCByZS1wbHVn IHRoZQo+IGFkYXB0ZXIsIHRoZSBjb25zb2xlIGlzIG5vdCBkaXNwbGF5ZWQgYW5kIEkgY2FuJ3Qg YWNjZXNzIGl0IHVudGlsIEkgcmVib290Cj4gdGhlIGJvYXJkLgo+IAo+IFRoZSByZWFzb24gaXMg dGhpczoKPiBXaGVuIHRoZSBhZGFwdGVyIGlzIHVucGx1Z2dlZCwgZGxmYl91c2JfZGlzY29ubmVj dCBjYWxscwo+IHVubGlua19mcmFtZWJ1ZmZlciwgdGhlbiBpdCB3YWl0cyB1bnRpbCB0aGUgcmVm ZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8KPiBhbmQgdGhlbiBpdCBkZWFsbG9jYXRlcyB0aGUg ZnJhbWVidWZmZXIuIEhvd2V2ZXIsIHRoZSBjb25zb2xlIHRoYXQgaXMKPiBhdHRhY2hlZCB0byB0 aGUgZnJhbWVidWZmZXIgZGV2aWNlIGtlZXBzIHRoZSByZWZlcmVuY2UgY291bnQgbm9uLXplcm8s IHNvCj4gdGhlIGZyYW1lYnVmZmVyIGRldmljZSBpcyBuZXZlciBkZXN0cm95ZWQuIFdoZW4gdGhl IFVTQiBhZGFwdGVyIGlzIHBsdWdnZWQKPiBhZ2FpbiwgaXQgY3JlYXRlcyBhIG5ldyBkZXZpY2Ug L2Rldi9mYjEgYW5kIHRoZSBjb25zb2xlIGlzIG5vdCBhdHRhY2hlZCB0bwo+IGl0Lgo+IAo+IFRo aXMgcGF0Y2ggZml4ZXMgdGhlIGJ1ZyBieSB1bmJpbmRpbmcgdGhlIGNvbnNvbGUgZnJvbSB1bmxp bmtfZnJhbWVidWZmZXIuCj4gVGhlIGNvZGUgdG8gdW5iaW5kIHRoZSBjb25zb2xlIGlzIG1vdmVk IGZyb20gZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlciB0bwo+IGEgZnVuY3Rpb24gdW5iaW5kX2Nv bnNvbGUuIFdoZW4gdGhlIGNvbnNvbGUgaXMgdW5ib3VuZCwgdGhlIHJlZmVyZW5jZQo+IGNvdW50 IGRyb3BzIHRvIHplcm8gYW5kIHRoZSB1ZGxmYiBkcml2ZXIgZnJlZXMgdGhlIGZyYW1lYnVmZmVy LiBXaGVuIHRoZQo+IGFkYXB0ZXIgaXMgcGx1Z2dlZCBiYWNrLCBhIG5ldyBmcmFtZWJ1ZmZlciBp cyBjcmVhdGVkIGFuZCB0aGUgY29uc29sZSBpcwo+IGF0dGFjaGVkIHRvIGl0Lgo+IAo+IFNpZ25l ZC1vZmYtYnk6IE1pa3VsYXMgUGF0b2NrYSA8bXBhdG9ja2FAcmVkaGF0LmNvbT4KPiBDYzogc3Rh YmxlQHZnZXIua2VybmVsLm9yZwoKRG9lcyB0aGlzIHdvcmsgY29ycmVjdGx5IHdpdGggdGhlIHVk bCBkcm0gZHJpdmVyIGFuZCB0aGUgZHJtIGZiZGV2CmVtdWxhdGlvbj8gSWYgeWVzIEknbSBub3Qg c3VyZSB3aGF0IHRoZSB2YWx1ZSBpcyBpbiBmaXhpbmcgdXAgdGhlIHVsZGZiCmRyaXZlciByZWFs bHkgLi4uCgpTYW1lIGZvciBhbGwgdGhlIHVsZGZiIGZpeGVzIGluIHlvdXIgb3RoZXIgc2VyaWVz LiBJZiB0aGUgMiBkcml2ZXJzIGFyZQpvbiBmZWF0dXJlIHBhcml0eSBJJ2QganVzdCBnbyBhaGVh ZCBhbmQgcmVtb3ZlIHRoZSB1bGRmYiBvbmUuCi1EYW5pZWwKPiAKPiAtLS0KPiAgZHJpdmVycy92 aWRlby9mYmRldi9jb3JlL2ZibWVtLmMgfCAgIDIxICsrKysrKysrKysrKysrKysrLS0tLQo+ICAx IGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiAKPiBJbmRl eDogbGludXgtNC4xNi4xMi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJtZW0uYwo+ID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KPiAtLS0gbGludXgtNC4xNi4xMi5vcmlnL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9m Ym1lbS5jCTIwMTgtMDUtMjYgMDY6MTM6MjAuMDAwMDAwMDAwICswMjAwCj4gKysrIGxpbnV4LTQu MTYuMTIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZibWVtLmMJMjAxOC0wNS0yNiAwNjoxMzoy MC4wMDAwMDAwMDAgKzAyMDAKPiBAQCAtMTgwNSwxMiArMTgwNSwxMiBAQCBzdGF0aWMgaW50IGRv X3JlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3Rh dGljIGludCBkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZv KQo+ICtzdGF0aWMgaW50IHVuYmluZF9jb25zb2xlKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQo+ ICB7Cj4gIAlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7Cj4gLQlpbnQgaSwgcmV0ID0gMDsKPiArCWlu dCByZXQ7Cj4gKwlpbnQgaSA9IGZiX2luZm8tPm5vZGU7Cj4gIAo+IC0JaSA9IGZiX2luZm8tPm5v ZGU7Cj4gIAlpZiAoaSA8IDAgfHwgaSA+PSBGQl9NQVggfHwgcmVnaXN0ZXJlZF9mYltpXSAhPSBm Yl9pbmZvKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiBAQCAtMTgyNSw2ICsxODI1LDE2IEBA IHN0YXRpYyBpbnQgZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHIKPiAgCXVubG9ja19mYl9p bmZvKGZiX2luZm8pOwo+ICAJY29uc29sZV91bmxvY2soKTsKPiAgCj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRvX3VucmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZi X2luZm8gKmZiX2luZm8pCj4gK3sKPiArCXN0cnVjdCBmYl9ldmVudCBldmVudDsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJcmV0ID0gdW5iaW5kX2NvbnNvbGUoZmJfaW5mbyk7Cj4gKwo+ICAJaWYgKHJl dCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gQEAgLTE4MzUsNyArMTg0NSw3IEBAIHN0YXRp YyBpbnQgZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHIKPiAgCSAgICAoZmJfaW5mby0+cGl4 bWFwLmZsYWdzICYgRkJfUElYTUFQX0RFRkFVTFQpKQo+ICAJCWtmcmVlKGZiX2luZm8tPnBpeG1h cC5hZGRyKTsKPiAgCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmZiX2luZm8tPm1vZGVsaXN0KTsKPiAt CXJlZ2lzdGVyZWRfZmJbaV0gPSBOVUxMOwo+ICsJcmVnaXN0ZXJlZF9mYltmYl9pbmZvLT5ub2Rl XSA9IE5VTEw7Cj4gIAludW1fcmVnaXN0ZXJlZF9mYi0tOwo+ICAJZmJfY2xlYW51cF9kZXZpY2Uo ZmJfaW5mbyk7Cj4gIAlldmVudC5pbmZvID0gZmJfaW5mbzsKPiBAQCAtMTg2MCw2ICsxODcwLDkg QEAgaW50IHVubGlua19mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZgo+ICAJCWRldmljZV9k ZXN0cm95KGZiX2NsYXNzLCBNS0RFVihGQl9NQUpPUiwgaSkpOwo+ICAJCWZiX2luZm8tPmRldiA9 IE5VTEw7Cj4gIAl9Cj4gKwo+ICsJdW5iaW5kX2NvbnNvbGUoZmJfaW5mbyk7Cj4gKwo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTCh1bmxpbmtfZnJhbWVidWZmZXIpOwo+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1h aWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmll bCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9n LmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=