[PATCH v2 0/3] arch/powerpc: Resolve backlight include dependencies

STALE913d

Revision v2 of 2 in this series.

9 messages, 3 authors, 2024-03-05 · open the first message on its own page

[PATCH v2 0/3] arch/powerpc: Resolve backlight include dependencies

From: Thomas Zimmermann <tzimmermann@suse.de>
Date: 2024-03-05 09:09:15

After cleaning up <linux/fb.h> in commit 11b4eedfc87d ("fbdev: Do
not include <linux/backlight.h> in header"), building with
CONFIG_PMAC_BACKLIGHT=y returns errors about missing declarations.
Patches 1 and 2 resolve the errors. Patch 1 has been reviewed at [1].
Patch 3 removes another dependency between backlight and fbdev code.

Compile tested with ppc6xx_defconfig.

v2:
	* via-pmu-backlight: fix build errors
	* powerpc: resolve dependency between fbdev and backlight

[1] https://patchwork.freedesktop.org/series/130661/

Thomas Zimmermann (3):
  fbdev/chipsfb: Include <linux/backlight.h>
  macintosh/via-pmu-backlight: Include <linux/backlight.h>
  arch/powerpc: Remove <linux/fb.h> from backlight code

 arch/powerpc/include/asm/backlight.h        |  5 ++--
 arch/powerpc/platforms/powermac/backlight.c | 26 ---------------------
 drivers/macintosh/via-pmu-backlight.c       |  1 +
 drivers/video/fbdev/chipsfb.c               |  1 +
 4 files changed, 4 insertions(+), 29 deletions(-)

-- 
2.44.0

[PATCH v2 1/3] fbdev/chipsfb: Include <linux/backlight.h>

From: Thomas Zimmermann <tzimmermann@suse.de>
Date: 2024-03-05 09:09:21

Fix builds with CONFIG_PMAC_BACKLIGHT=y. The include statement for
the backlight header has recently been removed from <linux/fb.h>.

Reported-by: Naresh Kamboju <redacted>
Closes: https://lore.kernel.org/dri-devel/CA+G9fYsAk5TbqqxFC2W4oHLGA0CbTHMxbeq8QayFXTU75YiueA@mail.gmail.com/
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Fixes: 11b4eedfc87d ("fbdev: Do not include <linux/backlight.h> in header")
Reviewed-by: Jani Nikula <redacted>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Jani Nikula <redacted>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-fbdev@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org
---
 drivers/video/fbdev/chipsfb.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c
index b80711f13df8a..b16a905588fed 100644
--- a/drivers/video/fbdev/chipsfb.c
+++ b/drivers/video/fbdev/chipsfb.c
@@ -15,6 +15,7 @@
  */
 
 #include <linux/aperture.h>
+#include <linux/backlight.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
-- 
2.44.0

[PATCH v2 2/3] macintosh/via-pmu-backlight: Include <linux/backlight.h>

From: Thomas Zimmermann <tzimmermann@suse.de>
Date: 2024-03-05 09:09:22

Fix builds with CONFIG_PMAC_BACKLIGHT=y. The include statement for the
backlight header has recently been removed from <linux/fb.h>. Add it to
via-pmu-backlight.c to get the necessary symbols.

Reported-by: Naresh Kamboju <redacted>
Closes: https://lore.kernel.org/dri-devel/CA+G9fYsAk5TbqqxFC2W4oHLGA0CbTHMxbeq8QayFXTU75YiueA@mail.gmail.com/
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Fixes: 11b4eedfc87d ("fbdev: Do not include <linux/backlight.h> in header")
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Jani Nikula <redacted>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-fbdev@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org
---
 drivers/macintosh/via-pmu-backlight.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/drivers/macintosh/via-pmu-backlight.c b/drivers/macintosh/via-pmu-backlight.c
index c2d87e7fa85be..89450645c2305 100644
--- a/drivers/macintosh/via-pmu-backlight.c
+++ b/drivers/macintosh/via-pmu-backlight.c
@@ -10,6 +10,7 @@
 
 #include <asm/ptrace.h>
 #include <linux/adb.h>
+#include <linux/backlight.h>
 #include <linux/pmu.h>
 #include <asm/backlight.h>
 
-- 
2.44.0

[PATCH v2 3/3] arch/powerpc: Remove <linux/fb.h> from backlight code

From: Thomas Zimmermann <tzimmermann@suse.de>
Date: 2024-03-05 09:09:23

Replace <linux/fb.h> with a forward declaration in <asm/backlight.h> to
resolves an unnecessary dependency. Remove pmac_backlight_curve_lookup()
and struct fb_info from source and header files. The function and the
framebuffer struct is unused. No functional changes.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 arch/powerpc/include/asm/backlight.h        |  5 ++--
 arch/powerpc/platforms/powermac/backlight.c | 26 ---------------------
 2 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/arch/powerpc/include/asm/backlight.h b/arch/powerpc/include/asm/backlight.h
index 1b5eab62ed047..061a910d74929 100644
--- a/arch/powerpc/include/asm/backlight.h
+++ b/arch/powerpc/include/asm/backlight.h
@@ -10,15 +10,14 @@
 #define __ASM_POWERPC_BACKLIGHT_H
 #ifdef __KERNEL__
 
-#include <linux/fb.h>
 #include <linux/mutex.h>
 
+struct backlight_device;
+
 /* For locking instructions, see the implementation file */
 extern struct backlight_device *pmac_backlight;
 extern struct mutex pmac_backlight_mutex;
 
-extern int pmac_backlight_curve_lookup(struct fb_info *info, int value);
-
 extern int pmac_has_backlight_type(const char *type);
 
 extern void pmac_backlight_key(int direction);
diff --git a/arch/powerpc/platforms/powermac/backlight.c b/arch/powerpc/platforms/powermac/backlight.c
index aeb79a8b3e109..12bc01353bd3c 100644
--- a/arch/powerpc/platforms/powermac/backlight.c
+++ b/arch/powerpc/platforms/powermac/backlight.c
@@ -9,7 +9,6 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/fb.h>
 #include <linux/backlight.h>
 #include <linux/adb.h>
 #include <linux/pmu.h>
@@ -72,31 +71,6 @@ int pmac_has_backlight_type(const char *type)
 	return 0;
 }
 
-int pmac_backlight_curve_lookup(struct fb_info *info, int value)
-{
-	int level = (FB_BACKLIGHT_LEVELS - 1);
-
-	if (info && info->bl_dev) {
-		int i, max = 0;
-
-		/* Look for biggest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++)
-			max = max((int)info->bl_curve[i], max);
-
-		/* Look for nearest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++) {
-			int diff = abs(info->bl_curve[i] - value);
-			if (diff < max) {
-				max = diff;
-				level = i;
-			}
-		}
-
-	}
-
-	return level;
-}
-
 static void pmac_backlight_key_worker(struct work_struct *work)
 {
 	if (atomic_read(&kernel_backlight_disabled))
-- 
2.44.0

Re: [PATCH v2 2/3] macintosh/via-pmu-backlight: Include <linux/backlight.h>

From: Jani Nikula <hidden>
Date: 2024-03-05 09:13:31

On Tue, 05 Mar 2024, Thomas Zimmermann [off-list ref] wrote:
Fix builds with CONFIG_PMAC_BACKLIGHT=y. The include statement for the
backlight header has recently been removed from <linux/fb.h>. Add it to
via-pmu-backlight.c to get the necessary symbols.

Reported-by: Naresh Kamboju <redacted>
Closes: https://lore.kernel.org/dri-devel/CA+G9fYsAk5TbqqxFC2W4oHLGA0CbTHMxbeq8QayFXTU75YiueA@mail.gmail.com/
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Fixes: 11b4eedfc87d ("fbdev: Do not include <linux/backlight.h> in header")
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Jani Nikula <redacted>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-fbdev@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org
Reviewed-by: Jani Nikula <redacted>
quoted hunk
---
 drivers/macintosh/via-pmu-backlight.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/drivers/macintosh/via-pmu-backlight.c b/drivers/macintosh/via-pmu-backlight.c
index c2d87e7fa85be..89450645c2305 100644
--- a/drivers/macintosh/via-pmu-backlight.c
+++ b/drivers/macintosh/via-pmu-backlight.c
@@ -10,6 +10,7 @@
 
 #include <asm/ptrace.h>
 #include <linux/adb.h>
+#include <linux/backlight.h>
 #include <linux/pmu.h>
 #include <asm/backlight.h>
-- 
Jani Nikula, Intel

Re: [PATCH v2 3/3] arch/powerpc: Remove <linux/fb.h> from backlight code

From: Jani Nikula <hidden>
Date: 2024-03-05 09:15:35

On Tue, 05 Mar 2024, Thomas Zimmermann [off-list ref] wrote:
Replace <linux/fb.h> with a forward declaration in <asm/backlight.h> to
resolves an unnecessary dependency. Remove pmac_backlight_curve_lookup()
*resolve
and struct fb_info from source and header files. The function and the
framebuffer struct is unused. No functional changes.
*are

Reviewed-by: Jani Nikula <redacted>
quoted hunk
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 arch/powerpc/include/asm/backlight.h        |  5 ++--
 arch/powerpc/platforms/powermac/backlight.c | 26 ---------------------
 2 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/arch/powerpc/include/asm/backlight.h b/arch/powerpc/include/asm/backlight.h
index 1b5eab62ed047..061a910d74929 100644
--- a/arch/powerpc/include/asm/backlight.h
+++ b/arch/powerpc/include/asm/backlight.h
@@ -10,15 +10,14 @@
 #define __ASM_POWERPC_BACKLIGHT_H
 #ifdef __KERNEL__
 
-#include <linux/fb.h>
 #include <linux/mutex.h>
 
+struct backlight_device;
+
 /* For locking instructions, see the implementation file */
 extern struct backlight_device *pmac_backlight;
 extern struct mutex pmac_backlight_mutex;
 
-extern int pmac_backlight_curve_lookup(struct fb_info *info, int value);
-
 extern int pmac_has_backlight_type(const char *type);
 
 extern void pmac_backlight_key(int direction);
diff --git a/arch/powerpc/platforms/powermac/backlight.c b/arch/powerpc/platforms/powermac/backlight.c
index aeb79a8b3e109..12bc01353bd3c 100644
--- a/arch/powerpc/platforms/powermac/backlight.c
+++ b/arch/powerpc/platforms/powermac/backlight.c
@@ -9,7 +9,6 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/fb.h>
 #include <linux/backlight.h>
 #include <linux/adb.h>
 #include <linux/pmu.h>
@@ -72,31 +71,6 @@ int pmac_has_backlight_type(const char *type)
 	return 0;
 }
 
-int pmac_backlight_curve_lookup(struct fb_info *info, int value)
-{
-	int level = (FB_BACKLIGHT_LEVELS - 1);
-
-	if (info && info->bl_dev) {
-		int i, max = 0;
-
-		/* Look for biggest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++)
-			max = max((int)info->bl_curve[i], max);
-
-		/* Look for nearest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++) {
-			int diff = abs(info->bl_curve[i] - value);
-			if (diff < max) {
-				max = diff;
-				level = i;
-			}
-		}
-
-	}
-
-	return level;
-}
-
 static void pmac_backlight_key_worker(struct work_struct *work)
 {
 	if (atomic_read(&kernel_backlight_disabled))
-- 
Jani Nikula, Intel

Re: [PATCH v2 3/3] arch/powerpc: Remove <linux/fb.h> from backlight code

From: Christophe Leroy <hidden>
Date: 2024-03-05 09:25:57


Le 05/03/2024 à 10:01, Thomas Zimmermann a écrit :
Replace <linux/fb.h> with a forward declaration in <asm/backlight.h> to
resolves an unnecessary dependency. Remove pmac_backlight_curve_lookup()
and struct fb_info from source and header files. The function and the
framebuffer struct is unused. No functional changes.
When you remove pmac_backlight_curve_lookup() prototype you'll then get 
a warning/error about missing prototype when building 
arch/powerpc/platforms/powermac/backlight.c

The fonction is not used outside of that file so it should be static. 
And then it is not used in that file either so it should be removed 
completely. Indeed last use of that function was removed by commit 
d565dd3b0824 ("[PATCH] powerpc: More via-pmu backlight fixes") so the 
function can safely be removed.

Christophe
quoted hunk
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
  arch/powerpc/include/asm/backlight.h        |  5 ++--
  arch/powerpc/platforms/powermac/backlight.c | 26 ---------------------
  2 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/arch/powerpc/include/asm/backlight.h b/arch/powerpc/include/asm/backlight.h
index 1b5eab62ed047..061a910d74929 100644
--- a/arch/powerpc/include/asm/backlight.h
+++ b/arch/powerpc/include/asm/backlight.h
@@ -10,15 +10,14 @@
  #define __ASM_POWERPC_BACKLIGHT_H
  #ifdef __KERNEL__
  
-#include <linux/fb.h>
  #include <linux/mutex.h>
  
+struct backlight_device;
+
  /* For locking instructions, see the implementation file */
  extern struct backlight_device *pmac_backlight;
  extern struct mutex pmac_backlight_mutex;
  
-extern int pmac_backlight_curve_lookup(struct fb_info *info, int value);
-
  extern int pmac_has_backlight_type(const char *type);
  
  extern void pmac_backlight_key(int direction);
diff --git a/arch/powerpc/platforms/powermac/backlight.c b/arch/powerpc/platforms/powermac/backlight.c
index aeb79a8b3e109..12bc01353bd3c 100644
--- a/arch/powerpc/platforms/powermac/backlight.c
+++ b/arch/powerpc/platforms/powermac/backlight.c
@@ -9,7 +9,6 @@
   */
  
  #include <linux/kernel.h>
-#include <linux/fb.h>
  #include <linux/backlight.h>
  #include <linux/adb.h>
  #include <linux/pmu.h>
@@ -72,31 +71,6 @@ int pmac_has_backlight_type(const char *type)
  	return 0;
  }
  
-int pmac_backlight_curve_lookup(struct fb_info *info, int value)
-{
-	int level = (FB_BACKLIGHT_LEVELS - 1);
-
-	if (info && info->bl_dev) {
-		int i, max = 0;
-
-		/* Look for biggest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++)
-			max = max((int)info->bl_curve[i], max);
-
-		/* Look for nearest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++) {
-			int diff = abs(info->bl_curve[i] - value);
-			if (diff < max) {
-				max = diff;
-				level = i;
-			}
-		}
-
-	}
-
-	return level;
-}
-
  static void pmac_backlight_key_worker(struct work_struct *work)
  {
  	if (atomic_read(&kernel_backlight_disabled))

Re: [PATCH v2 3/3] arch/powerpc: Remove <linux/fb.h> from backlight code

From: Thomas Zimmermann <tzimmermann@suse.de>
Date: 2024-03-05 10:04:28

Hi

Am 05.03.24 um 10:25 schrieb Christophe Leroy:
Le 05/03/2024 à 10:01, Thomas Zimmermann a écrit :
quoted
Replace <linux/fb.h> with a forward declaration in <asm/backlight.h> to
resolves an unnecessary dependency. Remove pmac_backlight_curve_lookup()
and struct fb_info from source and header files. The function and the
framebuffer struct is unused. No functional changes.
When you remove pmac_backlight_curve_lookup() prototype you'll then get
a warning/error about missing prototype when building
arch/powerpc/platforms/powermac/backlight.c

The fonction is not used outside of that file so it should be static.
And then it is not used in that file either so it should be removed
completely. Indeed last use of that function was removed by commit
d565dd3b0824 ("[PATCH] powerpc: More via-pmu backlight fixes") so the
function can safely be removed.
Isn't that what my patch is doing? I have no callers of the function in 
my tree (drm-tip), so I removed it entirely. Should I add a Fixes tag 
against commit d565dd3b0824? Best regards Thomas
Christophe
quoted
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
   arch/powerpc/include/asm/backlight.h        |  5 ++--
   arch/powerpc/platforms/powermac/backlight.c | 26 ---------------------
   2 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/arch/powerpc/include/asm/backlight.h b/arch/powerpc/include/asm/backlight.h
index 1b5eab62ed047..061a910d74929 100644
--- a/arch/powerpc/include/asm/backlight.h
+++ b/arch/powerpc/include/asm/backlight.h
@@ -10,15 +10,14 @@
   #define __ASM_POWERPC_BACKLIGHT_H
   #ifdef __KERNEL__
   
-#include <linux/fb.h>
   #include <linux/mutex.h>
   
+struct backlight_device;
+
   /* For locking instructions, see the implementation file */
   extern struct backlight_device *pmac_backlight;
   extern struct mutex pmac_backlight_mutex;
   
-extern int pmac_backlight_curve_lookup(struct fb_info *info, int value);
-
   extern int pmac_has_backlight_type(const char *type);
   
   extern void pmac_backlight_key(int direction);
diff --git a/arch/powerpc/platforms/powermac/backlight.c b/arch/powerpc/platforms/powermac/backlight.c
index aeb79a8b3e109..12bc01353bd3c 100644
--- a/arch/powerpc/platforms/powermac/backlight.c
+++ b/arch/powerpc/platforms/powermac/backlight.c
@@ -9,7 +9,6 @@
    */
   
   #include <linux/kernel.h>
-#include <linux/fb.h>
   #include <linux/backlight.h>
   #include <linux/adb.h>
   #include <linux/pmu.h>
@@ -72,31 +71,6 @@ int pmac_has_backlight_type(const char *type)
   	return 0;
   }
   
-int pmac_backlight_curve_lookup(struct fb_info *info, int value)
-{
-	int level = (FB_BACKLIGHT_LEVELS - 1);
-
-	if (info && info->bl_dev) {
-		int i, max = 0;
-
-		/* Look for biggest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++)
-			max = max((int)info->bl_curve[i], max);
-
-		/* Look for nearest value */
-		for (i = 0; i < FB_BACKLIGHT_LEVELS; i++) {
-			int diff = abs(info->bl_curve[i] - value);
-			if (diff < max) {
-				max = diff;
-				level = i;
-			}
-		}
-
-	}
-
-	return level;
-}
-
   static void pmac_backlight_key_worker(struct work_struct *work)
   {
   	if (atomic_read(&kernel_backlight_disabled))
-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

Re: [PATCH v2 3/3] arch/powerpc: Remove <linux/fb.h> from backlight code

From: Christophe Leroy <hidden>
Date: 2024-03-05 10:06:32


Le 05/03/2024 à 11:04, Thomas Zimmermann a écrit :
Hi

Am 05.03.24 um 10:25 schrieb Christophe Leroy:
quoted
Le 05/03/2024 à 10:01, Thomas Zimmermann a écrit :
quoted
Replace <linux/fb.h> with a forward declaration in <asm/backlight.h> to
resolves an unnecessary dependency. Remove pmac_backlight_curve_lookup()
and struct fb_info from source and header files. The function and the
framebuffer struct is unused. No functional changes.
When you remove pmac_backlight_curve_lookup() prototype you'll then get
a warning/error about missing prototype when building
arch/powerpc/platforms/powermac/backlight.c

The fonction is not used outside of that file so it should be static.
And then it is not used in that file either so it should be removed
completely. Indeed last use of that function was removed by commit
d565dd3b0824 ("[PATCH] powerpc: More via-pmu backlight fixes") so the
function can safely be removed.
Isn't that what my patch is doing? I have no callers of the function in 
my tree (drm-tip), so I removed it entirely. Should I add a Fixes tag 
against commit d565dd3b0824? Best regards Thomas
Sorry I overlooked your patch and focussed on the removal of the 
prototype and missed the removal of the function.

Christophe
quoted
Christophe
quoted
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
   arch/powerpc/include/asm/backlight.h        |  5 ++--
   arch/powerpc/platforms/powermac/backlight.c | 26 
---------------------
   2 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/arch/powerpc/include/asm/backlight.h 
b/arch/powerpc/include/asm/backlight.h
index 1b5eab62ed047..061a910d74929 100644
--- a/arch/powerpc/include/asm/backlight.h
+++ b/arch/powerpc/include/asm/backlight.h
@@ -10,15 +10,14 @@
   #define __ASM_POWERPC_BACKLIGHT_H
   #ifdef __KERNEL__
-#include <linux/fb.h>
   #include <linux/mutex.h>
+struct backlight_device;
+
   /* For locking instructions, see the implementation file */
   extern struct backlight_device *pmac_backlight;
   extern struct mutex pmac_backlight_mutex;
-extern int pmac_backlight_curve_lookup(struct fb_info *info, int 
value);
-
   extern int pmac_has_backlight_type(const char *type);
   extern void pmac_backlight_key(int direction);
diff --git a/arch/powerpc/platforms/powermac/backlight.c 
b/arch/powerpc/platforms/powermac/backlight.c
index aeb79a8b3e109..12bc01353bd3c 100644
--- a/arch/powerpc/platforms/powermac/backlight.c
+++ b/arch/powerpc/platforms/powermac/backlight.c
@@ -9,7 +9,6 @@
    */
   #include <linux/kernel.h>
-#include <linux/fb.h>
   #include <linux/backlight.h>
   #include <linux/adb.h>
   #include <linux/pmu.h>
@@ -72,31 +71,6 @@ int pmac_has_backlight_type(const char *type)
       return 0;
   }
-int pmac_backlight_curve_lookup(struct fb_info *info, int value)
-{
-    int level = (FB_BACKLIGHT_LEVELS - 1);
-
-    if (info && info->bl_dev) {
-        int i, max = 0;
-
-        /* Look for biggest value */
-        for (i = 0; i < FB_BACKLIGHT_LEVELS; i++)
-            max = max((int)info->bl_curve[i], max);
-
-        /* Look for nearest value */
-        for (i = 0; i < FB_BACKLIGHT_LEVELS; i++) {
-            int diff = abs(info->bl_curve[i] - value);
-            if (diff < max) {
-                max = diff;
-                level = i;
-            }
-        }
-
-    }
-
-    return level;
-}
-
   static void pmac_backlight_key_worker(struct work_struct *work)
   {
       if (atomic_read(&kernel_backlight_disabled))
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help