2019-05-20 08:26:31

by Daniel Vetter

[permalink] [raw]
Subject: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly

With

commit 6104c37094e729f3d4ce65797002112735d49cd1
Author: Daniel Vetter <[email protected]>
Date: Tue Aug 1 17:32:07 2017 +0200

fbcon: Make fbcon a built-time depency for fbdev

we have a static dependency between fbcon and fbdev, and we can
replace the indirection through the notifier chain with a function
call.

Signed-off-by: Daniel Vetter <[email protected]>
Cc: Bartlomiej Zolnierkiewicz <[email protected]>
Cc: Daniel Vetter <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: "Noralf Trønnes" <[email protected]>
Cc: Yisheng Xie <[email protected]>
Cc: Peter Rosin <[email protected]>
Cc: "Michał Mirosław" <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: Mikulas Patocka <[email protected]>
Cc: [email protected]
---
drivers/video/fbdev/core/fbcon.c | 14 +++-----------
drivers/video/fbdev/core/fbmem.c | 9 ++-------
include/linux/fb.h | 4 ----
include/linux/fbcon.h | 4 ++++
4 files changed, 9 insertions(+), 22 deletions(-)

diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index a1be589b692f..95af6bd783e8 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -3115,14 +3115,14 @@ static int fbcon_fb_unbind(int idx)
}

/* called with console_lock held */
-static int fbcon_fb_unregistered(struct fb_info *info)
+void fbcon_fb_unregistered(struct fb_info *info)
{
int i, idx;

WARN_CONSOLE_UNLOCKED();

if (deferred_takeover)
- return 0;
+ return;

idx = info->node;
for (i = first_fb_vc; i <= last_fb_vc; i++) {
@@ -3151,8 +3151,6 @@ static int fbcon_fb_unregistered(struct fb_info *info)

if (!num_registered_fb)
do_unregister_con_driver(&fb_con);
-
- return 0;
}

/* called with console_lock held */
@@ -3211,7 +3209,7 @@ static inline void fbcon_select_primary(struct fb_info *info)
#endif /* CONFIG_FRAMEBUFFER_DETECT_PRIMARY */

/* called with console_lock held */
-static int fbcon_fb_registered(struct fb_info *info)
+int fbcon_fb_registered(struct fb_info *info)
{
int ret = 0, i, idx;

@@ -3355,12 +3353,6 @@ static int fbcon_event_notify(struct notifier_block *self,
idx = info->node;
ret = fbcon_fb_unbind(idx);
break;
- case FB_EVENT_FB_REGISTERED:
- ret = fbcon_fb_registered(info);
- break;
- case FB_EVENT_FB_UNREGISTERED:
- ret = fbcon_fb_unregistered(info);
- break;
case FB_EVENT_SET_CONSOLE_MAP:
/* called with console lock held */
con2fb = event->data;
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index fc3d34a8ea5b..ae2db31eeba7 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1660,7 +1660,6 @@ MODULE_PARM_DESC(lockless_register_fb,
static int do_register_framebuffer(struct fb_info *fb_info)
{
int i, ret;
- struct fb_event event;
struct fb_videomode mode;

if (fb_check_foreignness(fb_info))
@@ -1723,7 +1722,6 @@ static int do_register_framebuffer(struct fb_info *fb_info)
fb_add_videomode(&mode, &fb_info->modelist);
registered_fb[i] = fb_info;

- event.info = fb_info;
if (!lockless_register_fb)
console_lock();
else
@@ -1732,9 +1730,8 @@ static int do_register_framebuffer(struct fb_info *fb_info)
ret = -ENODEV;
goto unlock_console;
}
- ret = 0;

- fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
+ ret = fbcon_fb_registered(fb_info);
unlock_fb_info(fb_info);
unlock_console:
if (!lockless_register_fb)
@@ -1771,7 +1768,6 @@ static int __unlink_framebuffer(struct fb_info *fb_info);

static int do_unregister_framebuffer(struct fb_info *fb_info)
{
- struct fb_event event;
int ret;

ret = unbind_console(fb_info);
@@ -1789,9 +1785,8 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
registered_fb[fb_info->node] = NULL;
num_registered_fb--;
fb_cleanup_device(fb_info);
- event.info = fb_info;
console_lock();
- fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event);
+ fbcon_fb_unregistered(fb_info);
console_unlock();

/* this may free fb info */
diff --git a/include/linux/fb.h b/include/linux/fb.h
index f52ef0ad6781..701abaf79c87 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -136,10 +136,6 @@ struct fb_cursor_user {
#define FB_EVENT_RESUME 0x03
/* An entry from the modelist was removed */
#define FB_EVENT_MODE_DELETE 0x04
-/* A driver registered itself */
-#define FB_EVENT_FB_REGISTERED 0x05
-/* A driver unregistered itself */
-#define FB_EVENT_FB_UNREGISTERED 0x06
/* CONSOLE-SPECIFIC: get console to framebuffer mapping */
#define FB_EVENT_GET_CONSOLE_MAP 0x07
/* CONSOLE-SPECIFIC: set console to framebuffer mapping */
diff --git a/include/linux/fbcon.h b/include/linux/fbcon.h
index f68a7db14165..94a71e9e1257 100644
--- a/include/linux/fbcon.h
+++ b/include/linux/fbcon.h
@@ -4,9 +4,13 @@
#ifdef CONFIG_FRAMEBUFFER_CONSOLE
void __init fb_console_init(void);
void __exit fb_console_exit(void);
+int fbcon_fb_registered(struct fb_info *info);
+void fbcon_fb_unregistered(struct fb_info *info);
#else
static inline void fb_console_init(void) {}
static inline void fb_console_exit(void) {}
+static inline int fbcon_fb_registered(struct fb_info *info) { return 0; }
+static inline void fbcon_fb_unregistered(struct fb_info *info) {}
#endif

#endif /* _LINUX_FBCON_H */
--
2.20.1



2019-05-20 10:13:48

by Thomas Zimmermann

[permalink] [raw]
Subject: Re: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly

Hi

Am 20.05.19 um 10:33 schrieb Thomas Zimmermann:
> Hi
>
> Am 20.05.19 um 10:21 schrieb Daniel Vetter:
> ...
>> diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
>> index fc3d34a8ea5b..ae2db31eeba7 100644
>> --- a/drivers/video/fbdev/core/fbmem.c
>> +++ b/drivers/video/fbdev/core/fbmem.c
>> @@ -1660,7 +1660,6 @@ MODULE_PARM_DESC(lockless_register_fb,
>> static int do_register_framebuffer(struct fb_info *fb_info)
>> {
>> int i, ret;
>> - struct fb_event event;
>> struct fb_videomode mode;
>>
>> if (fb_check_foreignness(fb_info))
>> @@ -1723,7 +1722,6 @@ static int do_register_framebuffer(struct fb_info *fb_info)
>> fb_add_videomode(&mode, &fb_info->modelist);
>> registered_fb[i] = fb_info;
>>
>> - event.info = fb_info;
>> if (!lockless_register_fb)
>> console_lock();
>> else
>> @@ -1732,9 +1730,8 @@ static int do_register_framebuffer(struct fb_info *fb_info)
>> ret = -ENODEV;
>> goto unlock_console;
>> }
>> - ret = 0;
>>
>> - fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
>> + ret = fbcon_fb_registered(fb_info);
>
> What about backlight drivers? [1] Apparently these also use the
> notifiers. [2] From my understanding, backlight drivers would stop
> working with this change.

I just saw that backlight drivers only care about blanking and
unblanking. Never mind then.

Best regards
Thomas

>
> Best regards
> Thomas
>
> [1]
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight
> [2]
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight/backlight.c#n40
>
>> unlock_fb_info(fb_info);
>> unlock_console:
>> if (!lockless_register_fb)
>> @@ -1771,7 +1768,6 @@ static int __unlink_framebuffer(struct fb_info *fb_info);
>>
>> static int do_unregister_framebuffer(struct fb_info *fb_info)
>> {
>> - struct fb_event event;
>> int ret;
>>
>> ret = unbind_console(fb_info);
>> @@ -1789,9 +1785,8 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
>> registered_fb[fb_info->node] = NULL;
>> num_registered_fb--;
>> fb_cleanup_device(fb_info);
>> - event.info = fb_info;
>> console_lock();
>> - fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event);
>> + fbcon_fb_unregistered(fb_info);
>> console_unlock();
>>
>> /* this may free fb info */
>> diff --git a/include/linux/fb.h b/include/linux/fb.h
>> index f52ef0ad6781..701abaf79c87 100644
>> --- a/include/linux/fb.h
>> +++ b/include/linux/fb.h
>> @@ -136,10 +136,6 @@ struct fb_cursor_user {
>> #define FB_EVENT_RESUME 0x03
>> /* An entry from the modelist was removed */
>> #define FB_EVENT_MODE_DELETE 0x04
>> -/* A driver registered itself */
>> -#define FB_EVENT_FB_REGISTERED 0x05
>> -/* A driver unregistered itself */
>> -#define FB_EVENT_FB_UNREGISTERED 0x06
>> /* CONSOLE-SPECIFIC: get console to framebuffer mapping */
>> #define FB_EVENT_GET_CONSOLE_MAP 0x07
>> /* CONSOLE-SPECIFIC: set console to framebuffer mapping */
>> diff --git a/include/linux/fbcon.h b/include/linux/fbcon.h
>> index f68a7db14165..94a71e9e1257 100644
>> --- a/include/linux/fbcon.h
>> +++ b/include/linux/fbcon.h
>> @@ -4,9 +4,13 @@
>> #ifdef CONFIG_FRAMEBUFFER_CONSOLE
>> void __init fb_console_init(void);
>> void __exit fb_console_exit(void);
>> +int fbcon_fb_registered(struct fb_info *info);
>> +void fbcon_fb_unregistered(struct fb_info *info);
>> #else
>> static inline void fb_console_init(void) {}
>> static inline void fb_console_exit(void) {}
>> +static inline int fbcon_fb_registered(struct fb_info *info) { return 0; }
>> +static inline void fbcon_fb_unregistered(struct fb_info *info) {}
>> #endif
>>
>> #endif /* _LINUX_FBCON_H */
>>
>

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


Attachments:
signature.asc (499.00 B)
OpenPGP digital signature

2019-05-20 10:14:59

by Thomas Zimmermann

[permalink] [raw]
Subject: Re: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly

Hi

Am 20.05.19 um 10:21 schrieb Daniel Vetter:
...
> diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
> index fc3d34a8ea5b..ae2db31eeba7 100644
> --- a/drivers/video/fbdev/core/fbmem.c
> +++ b/drivers/video/fbdev/core/fbmem.c
> @@ -1660,7 +1660,6 @@ MODULE_PARM_DESC(lockless_register_fb,
> static int do_register_framebuffer(struct fb_info *fb_info)
> {
> int i, ret;
> - struct fb_event event;
> struct fb_videomode mode;
>
> if (fb_check_foreignness(fb_info))
> @@ -1723,7 +1722,6 @@ static int do_register_framebuffer(struct fb_info *fb_info)
> fb_add_videomode(&mode, &fb_info->modelist);
> registered_fb[i] = fb_info;
>
> - event.info = fb_info;
> if (!lockless_register_fb)
> console_lock();
> else
> @@ -1732,9 +1730,8 @@ static int do_register_framebuffer(struct fb_info *fb_info)
> ret = -ENODEV;
> goto unlock_console;
> }
> - ret = 0;
>
> - fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
> + ret = fbcon_fb_registered(fb_info);

What about backlight drivers? [1] Apparently these also use the
notifiers. [2] From my understanding, backlight drivers would stop
working with this change.

Best regards
Thomas

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight
[2]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight/backlight.c#n40

> unlock_fb_info(fb_info);
> unlock_console:
> if (!lockless_register_fb)
> @@ -1771,7 +1768,6 @@ static int __unlink_framebuffer(struct fb_info *fb_info);
>
> static int do_unregister_framebuffer(struct fb_info *fb_info)
> {
> - struct fb_event event;
> int ret;
>
> ret = unbind_console(fb_info);
> @@ -1789,9 +1785,8 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
> registered_fb[fb_info->node] = NULL;
> num_registered_fb--;
> fb_cleanup_device(fb_info);
> - event.info = fb_info;
> console_lock();
> - fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event);
> + fbcon_fb_unregistered(fb_info);
> console_unlock();
>
> /* this may free fb info */
> diff --git a/include/linux/fb.h b/include/linux/fb.h
> index f52ef0ad6781..701abaf79c87 100644
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -136,10 +136,6 @@ struct fb_cursor_user {
> #define FB_EVENT_RESUME 0x03
> /* An entry from the modelist was removed */
> #define FB_EVENT_MODE_DELETE 0x04
> -/* A driver registered itself */
> -#define FB_EVENT_FB_REGISTERED 0x05
> -/* A driver unregistered itself */
> -#define FB_EVENT_FB_UNREGISTERED 0x06
> /* CONSOLE-SPECIFIC: get console to framebuffer mapping */
> #define FB_EVENT_GET_CONSOLE_MAP 0x07
> /* CONSOLE-SPECIFIC: set console to framebuffer mapping */
> diff --git a/include/linux/fbcon.h b/include/linux/fbcon.h
> index f68a7db14165..94a71e9e1257 100644
> --- a/include/linux/fbcon.h
> +++ b/include/linux/fbcon.h
> @@ -4,9 +4,13 @@
> #ifdef CONFIG_FRAMEBUFFER_CONSOLE
> void __init fb_console_init(void);
> void __exit fb_console_exit(void);
> +int fbcon_fb_registered(struct fb_info *info);
> +void fbcon_fb_unregistered(struct fb_info *info);
> #else
> static inline void fb_console_init(void) {}
> static inline void fb_console_exit(void) {}
> +static inline int fbcon_fb_registered(struct fb_info *info) { return 0; }
> +static inline void fbcon_fb_unregistered(struct fb_info *info) {}
> #endif
>
> #endif /* _LINUX_FBCON_H */
>

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
HRB 21284 (AG Nürnberg)


Attachments:
signature.asc (499.00 B)
OpenPGP digital signature

2019-05-20 18:19:53

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly

Hi Daniel.

While browsing this nice patch series I stumbled upon a detail.

On Mon, May 20, 2019 at 10:21:53AM +0200, Daniel Vetter wrote:
> With
>
> commit 6104c37094e729f3d4ce65797002112735d49cd1
> Author: Daniel Vetter <[email protected]>
> Date: Tue Aug 1 17:32:07 2017 +0200
>
> fbcon: Make fbcon a built-time depency for fbdev
>
> we have a static dependency between fbcon and fbdev, and we can
> replace the indirection through the notifier chain with a function
> call.
>
> Signed-off-by: Daniel Vetter <[email protected]>
> Cc: Bartlomiej Zolnierkiewicz <[email protected]>
> Cc: Daniel Vetter <[email protected]>
> Cc: Hans de Goede <[email protected]>
> Cc: Greg Kroah-Hartman <[email protected]>
> Cc: "Noralf Trønnes" <[email protected]>
> Cc: Yisheng Xie <[email protected]>
> Cc: Peter Rosin <[email protected]>
> Cc: "Michał Mirosław" <[email protected]>
> Cc: Thomas Zimmermann <[email protected]>
> Cc: Mikulas Patocka <[email protected]>
> Cc: [email protected]
> ---
> diff --git a/include/linux/fb.h b/include/linux/fb.h
> index f52ef0ad6781..701abaf79c87 100644
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -136,10 +136,6 @@ struct fb_cursor_user {
> #define FB_EVENT_RESUME 0x03
> /* An entry from the modelist was removed */
> #define FB_EVENT_MODE_DELETE 0x04
> -/* A driver registered itself */
> -#define FB_EVENT_FB_REGISTERED 0x05
> -/* A driver unregistered itself */
> -#define FB_EVENT_FB_UNREGISTERED 0x06
> /* CONSOLE-SPECIFIC: get console to framebuffer mapping */
> #define FB_EVENT_GET_CONSOLE_MAP 0x07
> /* CONSOLE-SPECIFIC: set console to framebuffer mapping */

This breaks build of arch/arm/mach-pxa/am200epd.c thats uses
FB_EVENT_FB_*REGISTERED:


if (event == FB_EVENT_FB_REGISTERED)
return am200_share_video_mem(info);
else if (event == FB_EVENT_FB_UNREGISTERED)
return am200_unshare_video_mem(info);


Found while grepping for "FB_EVENT" so this is not a build
error I triggered.

Sam

2019-05-20 18:20:57

by Daniel Vetter

[permalink] [raw]
Subject: Re: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly

On Mon, May 20, 2019 at 7:08 PM Sam Ravnborg <[email protected]> wrote:
>
> Hi Daniel.
>
> While browsing this nice patch series I stumbled upon a detail.
>
> On Mon, May 20, 2019 at 10:21:53AM +0200, Daniel Vetter wrote:
> > With
> >
> > commit 6104c37094e729f3d4ce65797002112735d49cd1
> > Author: Daniel Vetter <[email protected]>
> > Date: Tue Aug 1 17:32:07 2017 +0200
> >
> > fbcon: Make fbcon a built-time depency for fbdev
> >
> > we have a static dependency between fbcon and fbdev, and we can
> > replace the indirection through the notifier chain with a function
> > call.
> >
> > Signed-off-by: Daniel Vetter <[email protected]>
> > Cc: Bartlomiej Zolnierkiewicz <[email protected]>
> > Cc: Daniel Vetter <[email protected]>
> > Cc: Hans de Goede <[email protected]>
> > Cc: Greg Kroah-Hartman <[email protected]>
> > Cc: "Noralf Trønnes" <[email protected]>
> > Cc: Yisheng Xie <[email protected]>
> > Cc: Peter Rosin <[email protected]>
> > Cc: "Michał Mirosław" <[email protected]>
> > Cc: Thomas Zimmermann <[email protected]>
> > Cc: Mikulas Patocka <[email protected]>
> > Cc: [email protected]
> > ---
> > diff --git a/include/linux/fb.h b/include/linux/fb.h
> > index f52ef0ad6781..701abaf79c87 100644
> > --- a/include/linux/fb.h
> > +++ b/include/linux/fb.h
> > @@ -136,10 +136,6 @@ struct fb_cursor_user {
> > #define FB_EVENT_RESUME 0x03
> > /* An entry from the modelist was removed */
> > #define FB_EVENT_MODE_DELETE 0x04
> > -/* A driver registered itself */
> > -#define FB_EVENT_FB_REGISTERED 0x05
> > -/* A driver unregistered itself */
> > -#define FB_EVENT_FB_UNREGISTERED 0x06
> > /* CONSOLE-SPECIFIC: get console to framebuffer mapping */
> > #define FB_EVENT_GET_CONSOLE_MAP 0x07
> > /* CONSOLE-SPECIFIC: set console to framebuffer mapping */
>
> This breaks build of arch/arm/mach-pxa/am200epd.c thats uses
> FB_EVENT_FB_*REGISTERED:
>
>
> if (event == FB_EVENT_FB_REGISTERED)
> return am200_share_video_mem(info);
> else if (event == FB_EVENT_FB_UNREGISTERED)
> return am200_unshare_video_mem(info);
>
>
> Found while grepping for "FB_EVENT" so this is not a build
> error I triggered.

Oh this is glorious :-/

Thanks a lot for spotting this, I guess I need to hack around on
metronomefb a bit ...
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

2019-05-21 15:11:16

by Daniel Vetter

[permalink] [raw]
Subject: Re: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly

On Mon, May 20, 2019 at 10:37:53AM +0200, Thomas Zimmermann wrote:
> Hi
>
> Am 20.05.19 um 10:33 schrieb Thomas Zimmermann:
> > Hi
> >
> > Am 20.05.19 um 10:21 schrieb Daniel Vetter:
> > ...
> >> diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
> >> index fc3d34a8ea5b..ae2db31eeba7 100644
> >> --- a/drivers/video/fbdev/core/fbmem.c
> >> +++ b/drivers/video/fbdev/core/fbmem.c
> >> @@ -1660,7 +1660,6 @@ MODULE_PARM_DESC(lockless_register_fb,
> >> static int do_register_framebuffer(struct fb_info *fb_info)
> >> {
> >> int i, ret;
> >> - struct fb_event event;
> >> struct fb_videomode mode;
> >>
> >> if (fb_check_foreignness(fb_info))
> >> @@ -1723,7 +1722,6 @@ static int do_register_framebuffer(struct fb_info *fb_info)
> >> fb_add_videomode(&mode, &fb_info->modelist);
> >> registered_fb[i] = fb_info;
> >>
> >> - event.info = fb_info;
> >> if (!lockless_register_fb)
> >> console_lock();
> >> else
> >> @@ -1732,9 +1730,8 @@ static int do_register_framebuffer(struct fb_info *fb_info)
> >> ret = -ENODEV;
> >> goto unlock_console;
> >> }
> >> - ret = 0;
> >>
> >> - fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
> >> + ret = fbcon_fb_registered(fb_info);
> >
> > What about backlight drivers? [1] Apparently these also use the
> > notifiers. [2] From my understanding, backlight drivers would stop
> > working with this change.
>
> I just saw that backlight drivers only care about blanking and
> unblanking. Never mind then.

I did screw this up for one event for the mode changes. But should be
fixed in the next series.

I also added a patch to simplify the backlight/lcd notifier, since it
doesn't need to filter events anymore after this series - the only events
left are the ones backlight cares about.

Cheers, Daniel

>
> Best regards
> Thomas
>
> >
> > Best regards
> > Thomas
> >
> > [1]
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight
> > [2]
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight/backlight.c#n40
> >
> >> unlock_fb_info(fb_info);
> >> unlock_console:
> >> if (!lockless_register_fb)
> >> @@ -1771,7 +1768,6 @@ static int __unlink_framebuffer(struct fb_info *fb_info);
> >>
> >> static int do_unregister_framebuffer(struct fb_info *fb_info)
> >> {
> >> - struct fb_event event;
> >> int ret;
> >>
> >> ret = unbind_console(fb_info);
> >> @@ -1789,9 +1785,8 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
> >> registered_fb[fb_info->node] = NULL;
> >> num_registered_fb--;
> >> fb_cleanup_device(fb_info);
> >> - event.info = fb_info;
> >> console_lock();
> >> - fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event);
> >> + fbcon_fb_unregistered(fb_info);
> >> console_unlock();
> >>
> >> /* this may free fb info */
> >> diff --git a/include/linux/fb.h b/include/linux/fb.h
> >> index f52ef0ad6781..701abaf79c87 100644
> >> --- a/include/linux/fb.h
> >> +++ b/include/linux/fb.h
> >> @@ -136,10 +136,6 @@ struct fb_cursor_user {
> >> #define FB_EVENT_RESUME 0x03
> >> /* An entry from the modelist was removed */
> >> #define FB_EVENT_MODE_DELETE 0x04
> >> -/* A driver registered itself */
> >> -#define FB_EVENT_FB_REGISTERED 0x05
> >> -/* A driver unregistered itself */
> >> -#define FB_EVENT_FB_UNREGISTERED 0x06
> >> /* CONSOLE-SPECIFIC: get console to framebuffer mapping */
> >> #define FB_EVENT_GET_CONSOLE_MAP 0x07
> >> /* CONSOLE-SPECIFIC: set console to framebuffer mapping */
> >> diff --git a/include/linux/fbcon.h b/include/linux/fbcon.h
> >> index f68a7db14165..94a71e9e1257 100644
> >> --- a/include/linux/fbcon.h
> >> +++ b/include/linux/fbcon.h
> >> @@ -4,9 +4,13 @@
> >> #ifdef CONFIG_FRAMEBUFFER_CONSOLE
> >> void __init fb_console_init(void);
> >> void __exit fb_console_exit(void);
> >> +int fbcon_fb_registered(struct fb_info *info);
> >> +void fbcon_fb_unregistered(struct fb_info *info);
> >> #else
> >> static inline void fb_console_init(void) {}
> >> static inline void fb_console_exit(void) {}
> >> +static inline int fbcon_fb_registered(struct fb_info *info) { return 0; }
> >> +static inline void fbcon_fb_unregistered(struct fb_info *info) {}
> >> #endif
> >>
> >> #endif /* _LINUX_FBCON_H */
> >>
> >
>
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
> GF: Felix Imend?rffer, Mary Higgins, Sri Rasiah
> HRB 21284 (AG N?rnberg)
>




--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch