Re: [PATCH v2 fbdev-for-next 1/2] fbcon: introduce for_each_registered_fb() helper
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2018-06-30 15:50:29
Also in:
dri-devel, lkml
On Sat, 2018-06-30 at 15:29 +0800, Yisheng Xie wrote:
Following pattern is often used:
for (i = 0; i < FB_MAX; i++) {
if (registered_fb[i]) {
...
}
}
Therefore, as Andy's suggestion, for_each_registered_fb() helper can
be introduced to make the code easier to read and write by reducing
indentation level. It also saves few lines of code in each occurrence.
This patch convert all part here at the same time.Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
quoted hunk ↗ jump to hunk
Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Yisheng Xie <redacted> --- v2: - rebase it to fbdev-for-next branch and add one more loop to replace - per Hans - Macro should be protected against nested conditionals. - per Andy drivers/video/fbdev/core/fbcon.c | 31 +++++++++++-------------------- drivers/video/fbdev/core/fbmem.c | 4 +--- include/linux/fb.h | 4 ++++ 3 files changed, 16 insertions(+), 23 deletions(-)diff --git a/drivers/video/fbdev/core/fbcon.cb/drivers/video/fbdev/core/fbcon.c index 5fb156b..e30d3a1 100644--- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c@@ -2234,8 +2234,8 @@ static int fbcon_switch(struct vc_data *vc) * * info->currcon = vc->vc_num; */ - for (i = 0; i < FB_MAX; i++) { - if (registered_fb[i] != NULL && registered_fb[i]-quoted
fbcon_par) {+ for_each_registered_fb(i) { + if (registered_fb[i]->fbcon_par) { struct fbcon_ops *o = registered_fb[i]-quoted
fbcon_par;o->currcon = vc->vc_num;@@ -3124,11 +3124,9 @@ static int fbcon_fb_unregistered(struct fb_info*info) if (idx = info_idx) { info_idx = -1; - for (i = 0; i < FB_MAX; i++) { - if (registered_fb[i] != NULL) { - info_idx = i; - break; - } + for_each_registered_fb(i) { + info_idx = i; + break; } }@@ -3609,10 +3607,8 @@ static int fbcon_output_notifier(structnotifier_block *nb, deferred_takeover = false; logo_shown = FBCON_LOGO_DONTSHOW; - for (i = 0; i < FB_MAX; i++) { - if (registered_fb[i]) - fbcon_fb_registered(registered_fb[i]); - } + for_each_registered_fb(i) + fbcon_fb_registered(registered_fb[i]); return NOTIFY_OK; }@@ -3638,11 +3634,9 @@ static void fbcon_start(void) console_lock(); - for (i = 0; i < FB_MAX; i++) { - if (registered_fb[i] != NULL) { - info_idx = i; - break; - } + for_each_registered_fb(i) { + info_idx = i; + break; } do_fbcon_takeover(0);@@ -3669,15 +3663,12 @@ static void fbcon_exit(void) kfree((void *)softback_buf); softback_buf = 0UL; - for (i = 0; i < FB_MAX; i++) { + for_each_registered_fb(i) { int pending = 0; mapped = 0; info = registered_fb[i]; - if (info = NULL) - continue; - if (info->queue.func) pending = cancel_work_sync(&info->queue); DPRINTK("fbcon: %s pending work\n", (pending ?"canceled" :diff --git a/drivers/video/fbdev/core/fbmem.cb/drivers/video/fbdev/core/fbmem.c index 609438d..645c6ac 100644--- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c@@ -1593,10 +1593,8 @@ static intdo_remove_conflicting_framebuffers(struct apertures_struct *a, int i, ret; /* check all firmware fbs and kick off if the base addr overlaps */ - for (i = 0 ; i < FB_MAX; i++) { + for_each_registered_fb(i) { struct apertures_struct *gen_aper; - if (!registered_fb[i]) - continue; if (!(registered_fb[i]->flags & FBINFO_MISC_FIRMWARE)) continue;diff --git a/include/linux/fb.h b/include/linux/fb.h index aa74a22..fd31e6f 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h@@ -650,6 +650,10 @@ extern int fb_get_color_depth(structfb_var_screeninfo *var, extern int num_registered_fb; extern struct class *fb_class; +#define for_each_registered_fb(i) \ + for (i = 0; i < FB_MAX; i++) \ + if (!registered_fb[i]) {} else + extern int lock_fb_info(struct fb_info *info); static inline void unlock_fb_info(struct fb_info *info)
-- Andy Shevchenko [off-list ref] Intel Finland Oy