diff mbox series

[5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected

Message ID 20230829142109.4521-6-tzimmermann@suse.de
State New
Headers show
Series fbdev: Split off code for boot-up logo | expand

Commit Message

Thomas Zimmermann Aug. 29, 2023, 2:15 p.m. UTC
Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise
provide empty implementations of the contained interfaces and avoid
using the exported variables.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/video/fbdev/core/Makefile      |  3 ++-
 drivers/video/fbdev/core/fb_internal.h | 11 +++++++++++
 drivers/video/fbdev/core/fb_logo.c     | 14 --------------
 drivers/video/fbdev/core/fbcon.c       |  4 ++++
 4 files changed, 17 insertions(+), 15 deletions(-)

Comments

Helge Deller Sept. 1, 2023, 8:22 a.m. UTC | #1
On 8/29/23 16:15, Thomas Zimmermann wrote:
> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise
> provide empty implementations of the contained interfaces and avoid
> using the exported variables.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
...
> diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
> index f157a5a1dffc..24b038510a71 100644
> --- a/drivers/video/fbdev/core/fbcon.c
> +++ b/drivers/video/fbdev/core/fbcon.c
> @@ -474,15 +474,19 @@ static int __init fb_console_setup(char *this_opt)
>
>   		if (!strncmp(options, "logo-pos:", 9)) {
>   			options += 9;
> +#ifdef CONFIG_LOGO
>   			if (!strcmp(options, "center"))
>   				fb_center_logo = true;
> +#endif

IMHO, *sometimes* it makes sense to not use #ifdef and code it instead like this:
   			if (IS_ENABLED(CONFIG_LOGO) &&
			    !strcmp(options, "center"))
...
That way the compiler will optimize that code away as well, but in
addition it will compile-check that you have correct coding independend
if CONFIG_LOGO is set or not.

>   			continue;
>   		}
>
>   		if (!strncmp(options, "logo-count:", 11)) {
>   			options += 11;
> +#ifdef CONFIG_LOGO
>   			if (*options)
>   				fb_logo_count = simple_strtol(options, &options, 0);
> +#endif

same here.

Helge
Thomas Zimmermann Sept. 4, 2023, 7:08 a.m. UTC | #2
Hi

Am 01.09.23 um 10:22 schrieb Helge Deller:
> On 8/29/23 16:15, Thomas Zimmermann wrote:
>> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise
>> provide empty implementations of the contained interfaces and avoid
>> using the exported variables.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ...
>> diff --git a/drivers/video/fbdev/core/fbcon.c 
>> b/drivers/video/fbdev/core/fbcon.c
>> index f157a5a1dffc..24b038510a71 100644
>> --- a/drivers/video/fbdev/core/fbcon.c
>> +++ b/drivers/video/fbdev/core/fbcon.c
>> @@ -474,15 +474,19 @@ static int __init fb_console_setup(char *this_opt)
>>
>>           if (!strncmp(options, "logo-pos:", 9)) {
>>               options += 9;
>> +#ifdef CONFIG_LOGO
>>               if (!strcmp(options, "center"))
>>                   fb_center_logo = true;
>> +#endif
> 
> IMHO, *sometimes* it makes sense to not use #ifdef and code it instead 
> like this:
>                if (IS_ENABLED(CONFIG_LOGO) &&
>                  !strcmp(options, "center"))
> ...
> That way the compiler will optimize that code away as well, but in
> addition it will compile-check that you have correct coding independend
> if CONFIG_LOGO is set or not.

Good idea. I'll change it. The IS_ENABLED code is also easier to read IMHO.

Best regards
Thomas

> 
>>               continue;
>>           }
>>
>>           if (!strncmp(options, "logo-count:", 11)) {
>>               options += 11;
>> +#ifdef CONFIG_LOGO
>>               if (*options)
>>                   fb_logo_count = simple_strtol(options, &options, 0);
>> +#endif
> 
> same here.
> 
> Helge
Javier Martinez Canillas Sept. 6, 2023, 10:12 a.m. UTC | #3
Thomas Zimmermann <tzimmermann@suse.de> writes:

> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise
> provide empty implementations of the contained interfaces and avoid
> using the exported variables.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>

Ah! You are doing in this patch exactly what I mentioned in my previous
email :)

I would just squash this patch with #4, but up to you.

Acked-by: Javier Martinez Canillas <javierm@redhat.com>
Thomas Zimmermann Sept. 7, 2023, 8:06 a.m. UTC | #4
Am 04.09.23 um 09:08 schrieb Thomas Zimmermann:
> Hi
> 
> Am 01.09.23 um 10:22 schrieb Helge Deller:
>> On 8/29/23 16:15, Thomas Zimmermann wrote:
>>> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise
>>> provide empty implementations of the contained interfaces and avoid
>>> using the exported variables.
>>>
>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ...
>>> diff --git a/drivers/video/fbdev/core/fbcon.c 
>>> b/drivers/video/fbdev/core/fbcon.c
>>> index f157a5a1dffc..24b038510a71 100644
>>> --- a/drivers/video/fbdev/core/fbcon.c
>>> +++ b/drivers/video/fbdev/core/fbcon.c
>>> @@ -474,15 +474,19 @@ static int __init fb_console_setup(char *this_opt)
>>>
>>>           if (!strncmp(options, "logo-pos:", 9)) {
>>>               options += 9;
>>> +#ifdef CONFIG_LOGO
>>>               if (!strcmp(options, "center"))
>>>                   fb_center_logo = true;
>>> +#endif
>>
>> IMHO, *sometimes* it makes sense to not use #ifdef and code it instead 
>> like this:
>>                if (IS_ENABLED(CONFIG_LOGO) &&
>>                  !strcmp(options, "center"))
>> ...
>> That way the compiler will optimize that code away as well, but in
>> addition it will compile-check that you have correct coding independend
>> if CONFIG_LOGO is set or not.
> 
> Good idea. I'll change it. The IS_ENABLED code is also easier to read IMHO.

I'll keep the current approach, but in a simplified form.

> 
> Best regards
> Thomas
> 
>>
>>>               continue;
>>>           }
>>>
>>>           if (!strncmp(options, "logo-count:", 11)) {
>>>               options += 11;
>>> +#ifdef CONFIG_LOGO
>>>               if (*options)
>>>                   fb_logo_count = simple_strtol(options, &options, 0);
>>> +#endif
>>
>> same here.
>>
>> Helge
>
Thomas Zimmermann Sept. 7, 2023, 8:07 a.m. UTC | #5
Am 06.09.23 um 12:12 schrieb Javier Martinez Canillas:
> Thomas Zimmermann <tzimmermann@suse.de> writes:
> 
>> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise
>> provide empty implementations of the contained interfaces and avoid
>> using the exported variables.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> 
> Ah! You are doing in this patch exactly what I mentioned in my previous
> email :)
> 
> I would just squash this patch with #4, but up to you.

I'll refactor these patches slightly: The unexporting of the helpers 
goes into a new patch and the rest of patches 4 and 5 will be squashed.

> 
> Acked-by: Javier Martinez Canillas <javierm@redhat.com>
>
diff mbox series

Patch

diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile
index adce31155e92..36d3156dc759 100644
--- a/drivers/video/fbdev/core/Makefile
+++ b/drivers/video/fbdev/core/Makefile
@@ -2,7 +2,6 @@ 
 obj-$(CONFIG_FB_NOTIFY)           += fb_notify.o
 obj-$(CONFIG_FB_CORE)             += fb.o
 fb-y                              := fb_info.o \
-                                     fb_logo.o \
                                      fbmem.o fbcmap.o \
                                      modedb.o fbcvt.o fb_cmdline.o fb_io_fops.o
 ifdef CONFIG_FB
@@ -24,6 +23,8 @@  fb-y				  += fbcon_rotate.o fbcon_cw.o fbcon_ud.o \
 endif
 endif
 
+fb-$(CONFIG_LOGO)		  += fb_logo.o
+
 obj-$(CONFIG_FB_CFB_FILLRECT)  += cfbfillrect.o
 obj-$(CONFIG_FB_CFB_COPYAREA)  += cfbcopyarea.o
 obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o
diff --git a/drivers/video/fbdev/core/fb_internal.h b/drivers/video/fbdev/core/fb_internal.h
index 79e57a5e6e7e..613832d335fe 100644
--- a/drivers/video/fbdev/core/fb_internal.h
+++ b/drivers/video/fbdev/core/fb_internal.h
@@ -21,10 +21,21 @@  static inline void fb_unregister_chrdev(void)
 #endif
 
 /* fb_logo.c */
+#if defined(CONFIG_LOGO)
 extern bool fb_center_logo;
 extern int fb_logo_count;
 int fb_prepare_logo(struct fb_info *fb_info, int rotate);
 int fb_show_logo(struct fb_info *fb_info, int rotate);
+#else
+static inline int fb_prepare_logo(struct fb_info *info, int rotate)
+{
+	return 0;
+}
+static inline int fb_show_logo(struct fb_info *info, int rotate)
+{
+	return 0;
+}
+#endif /* CONFIG_LOGO */
 
 /* fbmem.c */
 extern struct class *fb_class;
diff --git a/drivers/video/fbdev/core/fb_logo.c b/drivers/video/fbdev/core/fb_logo.c
index 76ba5a2bebae..cde0a330b2ad 100644
--- a/drivers/video/fbdev/core/fb_logo.c
+++ b/drivers/video/fbdev/core/fb_logo.c
@@ -7,7 +7,6 @@ 
 bool fb_center_logo __read_mostly;
 int fb_logo_count __read_mostly = -1;
 
-#ifdef CONFIG_LOGO
 static inline unsigned int safe_shift(unsigned int d, int n)
 {
 	return n < 0 ? d >> -n : d << n;
@@ -518,16 +517,3 @@  int fb_show_logo(struct fb_info *info, int rotate)
 	return y;
 }
 EXPORT_SYMBOL(fb_show_logo);
-#else
-int fb_prepare_logo(struct fb_info *info, int rotate)
-{
-	return 0;
-}
-EXPORT_SYMBOL(fb_prepare_logo);
-
-int fb_show_logo(struct fb_info *info, int rotate)
-{
-	return 0;
-}
-EXPORT_SYMBOL(fb_show_logo);
-#endif /* CONFIG_LOGO */
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index f157a5a1dffc..24b038510a71 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -474,15 +474,19 @@  static int __init fb_console_setup(char *this_opt)
 
 		if (!strncmp(options, "logo-pos:", 9)) {
 			options += 9;
+#ifdef CONFIG_LOGO
 			if (!strcmp(options, "center"))
 				fb_center_logo = true;
+#endif
 			continue;
 		}
 
 		if (!strncmp(options, "logo-count:", 11)) {
 			options += 11;
+#ifdef CONFIG_LOGO
 			if (*options)
 				fb_logo_count = simple_strtol(options, &options, 0);
+#endif
 			continue;
 		}
 	}