From: Manuel Schölling <hidden> Date: 2016-12-04 10:54:35
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
--
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
Changes in v6:
- Change of check if feature is enabled in
vgacon_scrollback_switch()
Changes in v5:
- Clearify documentation
- Skip superfluous array initialization
- Disable scrollback if buffer allocation fails
- Refactor vgacon_switch_scrollback()
- Rename vgacon_switch_scrollback() to vgacon_scrollback_switch()
- Add check for fg_console in vgacon_scrollback_update
Changes in v4.1:
- Fix compiler error
Changes in v4:
- Rename from VGACON_SOFT_SCROLLBACK_FOR_EACH_CONSOLE to
VGACON_SOFT_SCROLLBACK_PERSISTENT
- Split into two patches
- Rework documentation
- Remove cosmetic changes in comments (postponed)
Changes in v3:
- Add config option for this feature
- Fallback to old scrollback buffer if kcalloc() fails
- Remove ioctl() call again and add documentation about existing
escape sequence to flush the scrollback buffer
Changes in v2:
- Add ioctl() call to flush scrollback buffer
- (Patch v2 was not labeled as such, sorry)
Manuel Schölling (3):
console: Move scrollback data into its own struct
console: Add callback to flush scrollback buffer to consw struct
console: Add persistent scrollback buffers for all VGA consoles
drivers/tty/vt/vt.c | 9 +++
drivers/video/console/Kconfig | 25 ++++++-
drivers/video/console/vgacon.c | 165 ++++++++++++++++++++++++++++-------------
include/linux/console.h | 4 +
4 files changed, 148 insertions(+), 55 deletions(-)
--
2.1.4
From: Manuel Schölling <hidden> Date: 2016-12-04 10:54:36
This new callback is in preparation for persistent scrollback buffer
support for VGA consoles.
With a single scrollback buffer for all consoles, we could flush the
buffer just by invocating consw->con_switch(). But when each VGA console
has its own scrollback buffer, we need a new callback to tell the
video console driver which buffer to flush.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/tty/vt/vt.c | 9 +++++++++
drivers/video/console/vgacon.c | 24 +++++++++++++++++++++++-
include/linux/console.h | 4 ++++
3 files changed, 36 insertions(+), 1 deletion(-)
@@ -305,6 +315,14 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)}elsevgacon_cursor(c,CM_MOVE);}++staticvoidvgacon_flush_scrollback(structvc_data*c)+{+size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;++if(c->vc_num=fg_console)+vgacon_scrollback_reset(size);+}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)
From: Manuel Schölling <hidden> Date: 2016-12-04 10:54:58
This refactoring is in preparation for persistent scrollback
support for VGA console.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/vgacon.c | 91 ++++++++++++++++++++++--------------------
1 file changed, 47 insertions(+), 44 deletions(-)
@@ -287,13 +290,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback_size-soff);-scr_memcpyw(d,vgacon_scrollback+soff,copysize);+copysize=min(count,vgacon_scrollback.size-soff);+scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback,count);+scr_memcpyw(d,vgacon_scrollback.data,count);d+=count;}
From: Manuel Schölling <hidden> Date: 2016-12-04 10:55:02
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
On Sun, Dec 04, 2016 at 11:53:53AM +0100, Manuel Schölling wrote:
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
--
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
But this is now v8, right? I see two v7 patch series in my inbox :(
confused,
greg k-h
From: Manuel Schölling <hidden> Date: 2016-12-06 16:41:51
Hi Greg,
On Di, 2016-12-06 at 11:02 +0100, Greg KH wrote:
On Sun, Dec 04, 2016 at 11:53:53AM +0100, Manuel Schölling wrote:
quoted
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
--
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
But this is now v8, right? I see two v7 patch series in my inbox :(
confused,
Sorry for causing confusion. I wasn't sure about the workflow so asked
on #kernelnewbies a few days ago but apparently I misunderstood the
advice I got there:
This is just the same patch (v7) as I sent before, but I added the
Tested-By/Reviewed-By tags.
From: Manuel Schölling <hidden> Date: 2016-12-21 16:38:20
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
--
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
Changes in v6:
- Change of check if feature is enabled in
vgacon_scrollback_switch()
Changes in v5:
- Clearify documentation
- Skip superfluous array initialization
- Disable scrollback if buffer allocation fails
- Refactor vgacon_switch_scrollback()
- Rename vgacon_switch_scrollback() to vgacon_scrollback_switch()
- Add check for fg_console in vgacon_scrollback_update
Changes in v4.1:
- Fix compiler error
Changes in v4:
- Rename from VGACON_SOFT_SCROLLBACK_FOR_EACH_CONSOLE to
VGACON_SOFT_SCROLLBACK_PERSISTENT
- Split into two patches
- Rework documentation
- Remove cosmetic changes in comments (postponed)
Changes in v3:
- Add config option for this feature
- Fallback to old scrollback buffer if kcalloc() fails
- Remove ioctl() call again and add documentation about existing
escape sequence to flush the scrollback buffer
Changes in v2:
- Add ioctl() call to flush scrollback buffer
- (Patch v2 was not labeled as such, sorry)
Manuel Schölling (3):
console: Move scrollback data into its own struct
console: Add callback to flush scrollback buffer to consw struct
console: Add persistent scrollback buffers for all VGA consoles
drivers/tty/vt/vt.c | 9 +++
drivers/video/console/Kconfig | 25 ++++++-
drivers/video/console/vgacon.c | 165 ++++++++++++++++++++++++++++-------------
include/linux/console.h | 4 +
4 files changed, 148 insertions(+), 55 deletions(-)
--
2.1.4
From: Manuel Schölling <hidden> Date: 2016-12-21 16:38:23
This refactoring is in preparation for persistent scrollback
support for VGA console.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/vgacon.c | 91 ++++++++++++++++++++++--------------------
1 file changed, 47 insertions(+), 44 deletions(-)
@@ -287,13 +290,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback_size-soff);-scr_memcpyw(d,vgacon_scrollback+soff,copysize);+copysize=min(count,vgacon_scrollback.size-soff);+scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback,count);+scr_memcpyw(d,vgacon_scrollback.data,count);d+=count;}
From: Manuel Schölling <hidden> Date: 2016-12-21 16:38:25
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
From: Manuel Schölling <hidden> Date: 2016-12-21 16:38:56
This new callback is in preparation for persistent scrollback buffer
support for VGA consoles.
With a single scrollback buffer for all consoles, we could flush the
buffer just by invocating consw->con_switch(). But when each VGA console
has its own scrollback buffer, we need a new callback to tell the
video console driver which buffer to flush.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/tty/vt/vt.c | 9 +++++++++
drivers/video/console/vgacon.c | 24 +++++++++++++++++++++++-
include/linux/console.h | 4 ++++
3 files changed, 36 insertions(+), 1 deletion(-)
@@ -305,6 +315,14 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)}elsevgacon_cursor(c,CM_MOVE);}++staticvoidvgacon_flush_scrollback(structvc_data*c)+{+size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;++if(c->vc_num=fg_console)+vgacon_scrollback_reset(size);+}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)
Manuel,
Previous Greg KH reply implied that you should send it marked as v8 for
it to gain visibility and avoid confusion. Just prepend your changes
history with something like
Changes in v8:
- Added Reviewed-by, Tested-by statements
From: Manuel Schölling <hidden> Date: 2017-01-05 11:35:37
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
--
Changes in v8:
- Add Reviewed-by/Tested-By statements
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
Changes in v6:
- Change of check if feature is enabled in
vgacon_scrollback_switch()
Changes in v5:
- Clearify documentation
- Skip superfluous array initialization
- Disable scrollback if buffer allocation fails
- Refactor vgacon_switch_scrollback()
- Rename vgacon_switch_scrollback() to vgacon_scrollback_switch()
- Add check for fg_console in vgacon_scrollback_update
Changes in v4.1:
- Fix compiler error
Changes in v4:
- Rename from VGACON_SOFT_SCROLLBACK_FOR_EACH_CONSOLE to
VGACON_SOFT_SCROLLBACK_PERSISTENT
- Split into two patches
- Rework documentation
- Remove cosmetic changes in comments (postponed)
Changes in v3:
- Add config option for this feature
- Fallback to old scrollback buffer if kcalloc() fails
- Remove ioctl() call again and add documentation about existing
escape sequence to flush the scrollback buffer
Changes in v2:
- Add ioctl() call to flush scrollback buffer
- (Patch v2 was not labeled as such, sorry)
Manuel Schölling (3):
console: Move scrollback data into its own struct
console: Add callback to flush scrollback buffer to consw struct
console: Add persistent scrollback buffers for all VGA consoles
drivers/tty/vt/vt.c | 9 +++
drivers/video/console/Kconfig | 25 ++++++-
drivers/video/console/vgacon.c | 165 ++++++++++++++++++++++++++++-------------
include/linux/console.h | 4 +
4 files changed, 148 insertions(+), 55 deletions(-)
--
2.11.0
From: Manuel Schölling <hidden> Date: 2017-01-05 11:35:14
This new callback is in preparation for persistent scrollback buffer
support for VGA consoles.
With a single scrollback buffer for all consoles, we could flush the
buffer just by invocating consw->con_switch(). But when each VGA console
has its own scrollback buffer, we need a new callback to tell the
video console driver which buffer to flush.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/tty/vt/vt.c | 9 +++++++++
drivers/video/console/vgacon.c | 24 +++++++++++++++++++++++-
include/linux/console.h | 4 ++++
3 files changed, 36 insertions(+), 1 deletion(-)
@@ -305,6 +315,14 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)}elsevgacon_cursor(c,CM_MOVE);}++staticvoidvgacon_flush_scrollback(structvc_data*c)+{+size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;++if(c->vc_num=fg_console)+vgacon_scrollback_reset(size);+}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)
From: Manuel Schölling <hidden> Date: 2017-01-05 11:35:28
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
Hi,
The patchset generally looks fine to me but I have a question
regarding new VGACON_SOFT_SCROLLBACK_PERSISTENT config option.
Since the code size impact to support the persistent scrollback
feature is minimal wouldn't it be better to always include it?
The feature would be disabled by default and could be enabled
by using the new kernel command line parameter (you may also add
a new config option for enabling it by default if desired).
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
On Thursday, January 05, 2017 12:33:20 PM Manuel Schölling wrote:
quoted hunk
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
On Tuesday, January 10, 2017 05:22:22 PM Bartlomiej Zolnierkiewicz wrote:
Hi,
The patchset generally looks fine to me but I have a question
regarding new VGACON_SOFT_SCROLLBACK_PERSISTENT config option.
Since the code size impact to support the persistent scrollback
feature is minimal wouldn't it be better to always include it?
The feature would be disabled by default and could be enabled
by using the new kernel command line parameter (you may also add
a new config option for enabling it by default if desired).
Something like:
#ifdef VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT
static bool scrollback_persistent = 1;
#else
static bool scrollback_persistent;
#endif
module_param_named(scrollback_persistent, scrollback_persistent, bool, 0);
MODULE_PARM_DESC(scrollback_persistent, "Enable persistent scrollback feature");
and then use scrollback_persistent variable in vgacon_scrollback_switch()
to control the actual behavior instead of ifdefs.
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
On Thursday, January 05, 2017 12:33:20 PM Manuel Schölling wrote:
quoted
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
From: Manuel Schölling <hidden> Date: 2017-01-10 17:33:11
Hi Bartlomiej,
First of all thank you for you feedback!
On Tue, 2017-01-10 at 17:44 +0100, Bartlomiej Zolnierkiewicz wrote:
On Tuesday, January 10, 2017 05:22:22 PM Bartlomiej Zolnierkiewicz
wrote:
quoted
Hi,
The patchset generally looks fine to me but I have a question
regarding new VGACON_SOFT_SCROLLBACK_PERSISTENT config option.
Since the code size impact to support the persistent scrollback
feature is minimal wouldn't it be better to always include it?
The feature would be disabled by default and could be enabled
by using the new kernel command line parameter (you may also add
a new config option for enabling it by default if desired).
Something like:
#ifdef VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT
static bool scrollback_persistent = 1;
#else
static bool scrollback_persistent;
#endif
module_param_named(scrollback_persistent, scrollback_persistent,
bool, 0);
MODULE_PARM_DESC(scrollback_persistent, "Enable persistent scrollback
feature");
and then use scrollback_persistent variable in
vgacon_scrollback_switch()
to control the actual behavior instead of ifdefs.
Sounds pretty good to me. You are right: The code size impact is rather
small. I will apply your suggestions and send you another patch as soon
as I find the time to implement it (should be any time this week).
Thanks again!
Manuel
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
quoted
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
On Thursday, January 05, 2017 12:33:20 PM Manuel Schölling wrote:
quoted
Add a scrollback buffers for each VGA console. The benefit is
that
the scrollback history is not flushed when switching between
consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++-
--------------
2 files changed, 111 insertions(+), 56 deletions(-)
diff --git a/drivers/video/console/Kconfig
b/drivers/video/console/Kconfig
index c3f1fb9ee820..f500e58f7636 100644
range 1 1024
default "64"
help
- Enter the amount of System RAM to allocate for the
scrollback
- buffer. Each 64KB will give you approximately 16 80x25
- screenfuls of scrollback buffer
+ Enter the amount of System RAM to allocate for
scrollback
+ buffers of VGA consoles. Each 64KB will give you
approximately
+ 16 80x25 screenfuls of scrollback buffer.
+
+config VGACON_SOFT_SCROLLBACK_PERSISTENT
+ bool "Persistent Scrollback History for each console"
+ depends on VGACON_SOFT_SCROLLBACK
+ default n
+ help
+ Say Y here if the scrollback history should persist
when switching
+ between consoles. Otherwise, the scrollback history
will be flushed
+ each time the console is switched.
+
+ This feature might break your tool of choice to flush
the scrollback
+ buffer, e.g. clear(1) will work fine but Debian's
clear_console(1)
+ will be broken, which might cause security issues.
+ You can use the escape sequence \e[3J instead if this
feature is
+ activated.
+
+ Note that a buffer of VGACON_SOFT_SCROLLBACK_SIZE is
taken for each
+ created tty device.
+ So if you use a RAM-constrained system, say N here.
config MDA_CONSOLE
depends on !M68K && !PARISC && ISA
diff --git a/drivers/video/console/vgacon.c
b/drivers/video/console/vgacon.c
index 9a7c2bbc5326..ca23d222e029 100644
From: Manuel Schölling <hidden> Date: 2017-01-10 21:30:16
--
Changes in v9:
- Make persistent scrollback feature a boot parameter
Changes in v8:
- Add Reviewed-by/Tested-By statements
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
Changes in v6:
- Change of check if feature is enabled in
vgacon_scrollback_switch()
Changes in v5:
- Clearify documentation
- Skip superfluous array initialization
- Disable scrollback if buffer allocation fails
- Refactor vgacon_switch_scrollback()
- Rename vgacon_switch_scrollback() to vgacon_scrollback_switch()
- Add check for fg_console in vgacon_scrollback_update
Changes in v4.1:
- Fix compiler error
Changes in v4:
- Rename from VGACON_SOFT_SCROLLBACK_FOR_EACH_CONSOLE to
VGACON_SOFT_SCROLLBACK_PERSISTENT
- Split into two patches
- Rework documentation
- Remove cosmetic changes in comments (postponed)
Changes in v3:
- Add config option for this feature
- Fallback to old scrollback buffer if kcalloc() fails
- Remove ioctl() call again and add documentation about existing
escape sequence to flush the scrollback buffer
Changes in v2:
- Add ioctl() call to flush scrollback buffer
- (Patch v2 was not labeled as such, sorry)
Manuel Schölling (3):
console: Move scrollback data into its own struct
console: Add callback to flush scrollback buffer to consw struct
console: Add persistent scrollback buffers for all VGA consoles
drivers/tty/vt/vt.c | 9 +++
drivers/video/console/Kconfig | 25 ++++++-
drivers/video/console/vgacon.c | 165 ++++++++++++++++++++++++++++-------------
include/linux/console.h | 4 +
4 files changed, 148 insertions(+), 55 deletions(-)
--
2.11.0
From: Manuel Schölling <hidden> Date: 2017-01-10 21:29:51
This refactoring is in preparation for persistent scrollback
support for VGA console.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/vgacon.c | 91 ++++++++++++++++++++++--------------------
1 file changed, 47 insertions(+), 44 deletions(-)
@@ -287,13 +290,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback_size-soff);-scr_memcpyw(d,vgacon_scrollback+soff,copysize);+copysize=min(count,vgacon_scrollback.size-soff);+scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback,count);+scr_memcpyw(d,vgacon_scrollback.data,count);d+=count;}
From: Manuel Schölling <hidden> Date: 2017-01-10 21:29:56
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
From: Manuel Schölling <hidden> Date: 2017-01-10 21:30:03
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
---
drivers/video/console/Kconfig | 12 +++++++-----
drivers/video/console/vgacon.c | 25 ++++++++++++-------------
2 files changed, 19 insertions(+), 18 deletions(-)
@@ -47,14 +47,16 @@ config VGACON_SOFT_SCROLLBACK_SIZEbuffersofVGAconsoles.Each64KBwillgiveyouapproximately1680x25screenfulsofscrollbackbuffer.-configVGACON_SOFT_SCROLLBACK_PERSISTENT-bool"Persistent Scrollback History for each console"+configVGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT+bool"Persistent Scrollback History for each console by default"depends onVGACON_SOFT_SCROLLBACKdefaultnhelp-SayYhereifthescrollbackhistoryshouldpersistwhenswitching-betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed-eachtimetheconsoleisswitched.+SayYhereifthescrollbackhistoryshouldpersistbydefaultwhen+switchingbetweenconsoles.Otherwise,thescrollbackhistorywillbe+flushedeachtimetheconsoleisswitched.Thisfeaturecanalsobe+enabledusingthebootcommandlineparameter+'vgacon.scrollback_persistent=1'.Thisfeaturemightbreakyourtoolofchoicetoflushthescrollbackbuffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)
From: Adam Borowski <hidden> Date: 2017-01-10 23:00:01
On Tue, Jan 10, 2017 at 10:28:38PM +0100, Manuel Schölling wrote:
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
+module_param_named(scrollback_persistent, scrollback_persistent, bool, 0000);
+MODULE_PARM_DESC(scrollback_persistent, "Enable persistent scrollback for all vga consoles");
A command-line knob settable by the end-user is something more persistent
than a config option. As you're going to extend this code beyond vgacon in
the near future, perhaps it'd be better to have a shared setting for all
console drivers?
Meow!
--
Autotools hint: to do a zx-spectrum build on a pdp11 host, type:
./configure --host=zx-spectrum --build=pdp11
From: Manuel Schölling <hidden> Date: 2017-01-11 21:42:34
On Tue, 2017-01-10 at 23:58 +0100, Adam Borowski wrote:
On Tue, Jan 10, 2017 at 10:28:38PM +0100, Manuel Schölling wrote:
quoted
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command
line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
+module_param_named(scrollback_persistent, scrollback_persistent,
bool, 0000);
+MODULE_PARM_DESC(scrollback_persistent, "Enable persistent
scrollback for all vga consoles");
A command-line knob settable by the end-user is something more
persistent
than a config option. As you're going to extend this code beyond
vgacon in
the near future, perhaps it'd be better to have a shared setting for
all
console drivers?
Probably a good idea, but I'm struggling with the implementation a bit:
I tried to run
if (strstr(boot_command_line, "nopersistentscrollback")) {...}
in vgacon_scrollback_startup() but I am getting
WARNING: modpost: Found 2 section mismatch(es).
when compiling. Probably because vgacon_scrollback_startup() is
executed after init.
I tried to find another way to implement a boot cmd line parameter but
had no luck.
If you/somebody could point me in the right direction, it would be very
much appreciated.
Thanks!
Manuel
From: Manuel Schölling <hidden> Date: 2017-01-13 20:03:00
On Tue, 2017-01-10 at 23:58 +0100, Adam Borowski wrote:
On Tue, Jan 10, 2017 at 10:28:38PM +0100, Manuel Schölling wrote:
quoted
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command
line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
+module_param_named(scrollback_persistent, scrollback_persistent,
bool, 0000);
+MODULE_PARM_DESC(scrollback_persistent, "Enable persistent
scrollback for all vga consoles");
A command-line knob settable by the end-user is something more
persistent
than a config option. As you're going to extend this code beyond
vgacon in
the near future, perhaps it'd be better to have a shared setting for
all
console drivers?
According to the guys at #kernelnewbies on IRC everybody hates new
command line options.
I'd rather stick to the module parameter for now and maybe introduce a
new cmd line option later, once this feature has been implemented in
several console drivers.
Bye,
Manuel
On Fri, Jan 13, 2017 at 09:00:34PM +0100, Manuel Schölling wrote:
On Tue, 2017-01-10 at 23:58 +0100, Adam Borowski wrote:
quoted
On Tue, Jan 10, 2017 at 10:28:38PM +0100, Manuel Schölling wrote:
quoted
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command
line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
+module_param_named(scrollback_persistent, scrollback_persistent,
bool, 0000);
+MODULE_PARM_DESC(scrollback_persistent, "Enable persistent
scrollback for all vga consoles");
A command-line knob settable by the end-user is something more
persistent
than a config option. As you're going to extend this code beyond
vgacon in
the near future, perhaps it'd be better to have a shared setting for
all
console drivers?
According to the guys at #kernelnewbies on IRC everybody hates new
command line options.
That was me, you can use my name here :)
I'd rather stick to the module parameter for now and maybe introduce a
new cmd line option later, once this feature has been implemented in
several console drivers.
From: kbuild test robot <hidden> Date: 2017-01-11 13:33:37
Hi Manuel,
[auto build test ERROR on linus/master]
[also build test ERROR on v4.10-rc3 next-20170111]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Manuel-Sch-lling/console-Add-persistent-scrollback-buffers-for-all-VGA-consoles/20170111-203640
config: i386-randconfig-x018-201702 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All error/warnings (new ones prefixed by >>):
In file included from include/linux/module.h:18:0,
from drivers/video/console/vgacon.c:36:
drivers/video/console/vgacon.c: In function '__check_scrollback_persistent':
quoted
drivers/video/console/vgacon.c:1423:43: error: 'scrollback_persistent' undeclared (first use in this function)
module_param_named(scrollback_persistent, scrollback_persistent, bool, 0000);
^
include/linux/moduleparam.h:344:68: note: in definition of macro '__param_check'
static inline type __always_unused *__check_##name(void) { return(p); }
^
include/linux/moduleparam.h:146:2: note: in expansion of macro 'param_check_bool'
param_check_##type(name, &(value)); \
^~~~~~~~~~~~
quoted
drivers/video/console/vgacon.c:1423:1: note: in expansion of macro 'module_param_named'
module_param_named(scrollback_persistent, scrollback_persistent, bool, 0000);
^~~~~~~~~~~~~~~~~~
drivers/video/console/vgacon.c:1423:43: note: each undeclared identifier is reported only once for each function it appears in
module_param_named(scrollback_persistent, scrollback_persistent, bool, 0000);
^
include/linux/moduleparam.h:344:68: note: in definition of macro '__param_check'
static inline type __always_unused *__check_##name(void) { return(p); }
^
include/linux/moduleparam.h:146:2: note: in expansion of macro 'param_check_bool'
param_check_##type(name, &(value)); \
^~~~~~~~~~~~
quoted
drivers/video/console/vgacon.c:1423:1: note: in expansion of macro 'module_param_named'
module_param_named(scrollback_persistent, scrollback_persistent, bool, 0000);
^~~~~~~~~~~~~~~~~~
drivers/video/console/vgacon.c: At top level:
quoted
drivers/video/console/vgacon.c:1423:43: error: 'scrollback_persistent' undeclared here (not in a function)
module_param_named(scrollback_persistent, scrollback_persistent, bool, 0000);
^
include/linux/moduleparam.h:225:54: note: in definition of macro '__module_param_call'
VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } }
^~~
include/linux/moduleparam.h:147:2: note: in expansion of macro 'module_param_cb'
module_param_cb(name, ¶m_ops_##type, &value, perm); \
^~~~~~~~~~~~~~~
quoted
drivers/video/console/vgacon.c:1423:1: note: in expansion of macro 'module_param_named'
1424 MODULE_PARM_DESC(scrollback_persistent, "Enable persistent scrollback for all vga consoles");
1425 MODULE_LICENSE("GPL");
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
From: Manuel Schölling <hidden> Date: 2017-01-13 20:09:51
Changes in v10:
- Fix compilation error if CONFIG_VGACON_SOFT_SCROLLBACK=n
Changes in v9:
- Make persistent scrollback feature a boot parameter
Changes in v8:
- Add Reviewed-by/Tested-By statements
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
Changes in v6:
- Change of check if feature is enabled in
vgacon_scrollback_switch()
Changes in v5:
- Clearify documentation
- Skip superfluous array initialization
- Disable scrollback if buffer allocation fails
- Refactor vgacon_switch_scrollback()
- Rename vgacon_switch_scrollback() to vgacon_scrollback_switch()
- Add check for fg_console in vgacon_scrollback_update
Changes in v4.1:
- Fix compiler error
Changes in v4:
- Rename from VGACON_SOFT_SCROLLBACK_FOR_EACH_CONSOLE to
VGACON_SOFT_SCROLLBACK_PERSISTENT
- Split into two patches
- Rework documentation
- Remove cosmetic changes in comments (postponed)
Changes in v3:
- Add config option for this feature
- Fallback to old scrollback buffer if kcalloc() fails
- Remove ioctl() call again and add documentation about existing
escape sequence to flush the scrollback buffer
Changes in v2:
- Add ioctl() call to flush scrollback buffer
- (Patch v2 was not labeled as such, sorry)
Manuel Schölling (4):
console: Move scrollback data into its own struct
console: Add callback to flush scrollback buffer to consw struct
console: Add persistent scrollback buffers for all VGA consoles
console: Make persistent scrollback a boot parameter
drivers/tty/vt/vt.c | 9 +++
drivers/video/console/Kconfig | 27 ++++++-
drivers/video/console/vgacon.c | 164 ++++++++++++++++++++++++++++-------------
include/linux/console.h | 4 +
4 files changed, 149 insertions(+), 55 deletions(-)
--
2.11.0
From: Manuel Schölling <hidden> Date: 2017-01-13 20:09:04
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
On Fri, Jan 13, 2017 at 09:07:57PM +0100, Manuel Schölling wrote:
quoted hunk
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.
This issue is the one that makes me the most worried. Why doesn't
clear_console() work anymore? Why doesn't it use \e[3J ?
thanks,
greg k-h
From: Manuel Schölling <hidden> Date: 2017-01-19 16:13:52
On Thu, 2017-01-19 at 14:23 +0100, Greg KH wrote:
On Fri, Jan 13, 2017 at 09:07:57PM +0100, Manuel Schölling wrote:
quoted
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between
consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---
------------
2 files changed, 111 insertions(+), 56 deletions(-)
diff --git a/drivers/video/console/Kconfig
b/drivers/video/console/Kconfig
index c3f1fb9ee820..f500e58f7636 100644
range 1 1024
default "64"
help
- Enter the amount of System RAM to allocate for the
scrollback
- buffer. Each 64KB will give you approximately 16 80x25
- screenfuls of scrollback buffer
+ Enter the amount of System RAM to allocate for
scrollback
+ buffers of VGA consoles. Each 64KB will give you
approximately
+ 16 80x25 screenfuls of scrollback buffer.
+
+config VGACON_SOFT_SCROLLBACK_PERSISTENT
+ bool "Persistent Scrollback History for each console"
+ depends on VGACON_SOFT_SCROLLBACK
+ default n
+ help
+ Say Y here if the scrollback history should persist when
switching
+ between consoles. Otherwise, the scrollback history will
be flushed
+ each time the console is switched.
+
+ This feature might break your tool of choice to flush
the scrollback
+ buffer, e.g. clear(1) will work fine but Debian's
clear_console(1)
+ will be broken, which might cause security issues.
+ You can use the escape sequence \e[3J instead if this
feature is
+ activated.
This issue is the one that makes me the most worried. Why doesn't
clear_console() work anymore? Why doesn't it use \e[3J ?
Well, clear_console() just switches from one console to another and
back again. It just assumes that the scrollback buffer is flushed when
switching.
My plan is to make a patch for clear_console() as soon as these patches
are in the kernel - it's chicken-and-egg problem.
Bye,
Manuel
On Thu, Jan 19, 2017 at 05:12:15PM +0100, Manuel Schölling wrote:
On Thu, 2017-01-19 at 14:23 +0100, Greg KH wrote:
quoted
On Fri, Jan 13, 2017 at 09:07:57PM +0100, Manuel Schölling wrote:
quoted
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between
consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---
------------
2 files changed, 111 insertions(+), 56 deletions(-)
diff --git a/drivers/video/console/Kconfig
b/drivers/video/console/Kconfig
index c3f1fb9ee820..f500e58f7636 100644
range 1 1024
default "64"
help
- Enter the amount of System RAM to allocate for the
scrollback
- buffer. Each 64KB will give you approximately 16 80x25
- screenfuls of scrollback buffer
+ Enter the amount of System RAM to allocate for
scrollback
+ buffers of VGA consoles. Each 64KB will give you
approximately
+ 16 80x25 screenfuls of scrollback buffer.
+
+config VGACON_SOFT_SCROLLBACK_PERSISTENT
+ bool "Persistent Scrollback History for each console"
+ depends on VGACON_SOFT_SCROLLBACK
+ default n
+ help
+ Say Y here if the scrollback history should persist when
switching
+ between consoles. Otherwise, the scrollback history will
be flushed
+ each time the console is switched.
+
+ This feature might break your tool of choice to flush
the scrollback
+ buffer, e.g. clear(1) will work fine but Debian's
clear_console(1)
+ will be broken, which might cause security issues.
+ You can use the escape sequence \e[3J instead if this
feature is
+ activated.
This issue is the one that makes me the most worried. Why doesn't
clear_console() work anymore? Why doesn't it use \e[3J ?
Well, clear_console() just switches from one console to another and
back again. It just assumes that the scrollback buffer is flushed when
switching.
My plan is to make a patch for clear_console() as soon as these patches
are in the kernel - it's chicken-and-egg problem.
I'd recommend that patch get to clear_console() first, having it use the
new escape sequence, if it isn't supported, shouldn't cause any
problems, right?
thanks,
greg k-h
From: Adam Borowski <hidden> Date: 2017-01-19 23:44:19
On Thu, Jan 19, 2017 at 05:33:14PM +0100, Greg KH wrote:
On Thu, Jan 19, 2017 at 05:12:15PM +0100, Manuel Schölling wrote:
quoted
On Thu, 2017-01-19 at 14:23 +0100, Greg KH wrote:
quoted
On Fri, Jan 13, 2017 at 09:07:57PM +0100, Manuel Schölling wrote:
quoted
+ This feature might break your tool of choice to flush
the scrollback
+ buffer, e.g. clear(1) will work fine but Debian's
clear_console(1)
+ will be broken, which might cause security issues.
+ You can use the escape sequence \e[3J instead if this
feature is
+ activated.
This issue is the one that makes me the most worried. Why doesn't
clear_console() work anymore? Why doesn't it use \e[3J ?
Well, clear_console() just switches from one console to another and
back again. It just assumes that the scrollback buffer is flushed when
switching.
My plan is to make a patch for clear_console() as soon as these patches
are in the kernel - it's chicken-and-egg problem.
I'd recommend that patch get to clear_console() first, having it use the
new escape sequence, if it isn't supported, shouldn't cause any
problems, right?
In that case, we need to hurry -- the last day for any non-serious fixes in
Debian is Jan 26, after that it'll be frozen for months, and any subsequent
changes won't get to stable users for around two years.
doko: would you consider, pretty please with a cherry on top, applying the
patch I've sent to this bug? The privacy/security issue is pretty minor and
applies only to a tiny fraction of users, but I understand why Greg is
reluctant.
Manuel's scrollback changes won't go to 4.9, and won't be enabled by default
for the time being, but using a newer kernel on old userspace is something
really widespread, be it via bpo, containers on an updated host, etc.
Meow!
--
Autotools hint: to do a zx-spectrum build on a pdp11 host, type:
./configure --host=zx-spectrum --build=pdp11
From: Adam Borowski <hidden> Date: 2017-01-20 13:17:13
On Fri, Jan 20, 2017 at 12:04:12AM +0100, Adam Borowski wrote:
On Thu, Jan 19, 2017 at 05:33:14PM +0100, Greg KH wrote:
quoted
On Thu, Jan 19, 2017 at 05:12:15PM +0100, Manuel Schölling wrote:
quoted
On Thu, 2017-01-19 at 14:23 +0100, Greg KH wrote:
quoted
On Fri, Jan 13, 2017 at 09:07:57PM +0100, Manuel Schölling wrote:
quoted
+ This feature might break your tool of choice to flush
the scrollback
+ buffer, e.g. clear(1) will work fine but Debian's
clear_console(1)
+ will be broken, which might cause security issues.
+ You can use the escape sequence \e[3J instead if this
feature is
+ activated.
I'd recommend that patch get to clear_console() first, having it use the
new escape sequence, if it isn't supported, shouldn't cause any
problems, right?
doko: would you consider, pretty please with a cherry on top, applying the
patch I've sent to this bug? The privacy/security issue is pretty minor and
applies only to a tiny fraction of users, but I understand why Greg is
reluctant.
# Subject: Bug#845177 closed by Matthias Klose [off-list ref]
#
# This is an automatic notification regarding your Bug report
# which was filed against the bash package:
#
# #845177: clear_console: assumes VT switch clears scrollback
#
# It has been closed by Matthias Klose [off-list ref].
[...]
# Changes:
# * clear_console: Securely erase the current console. Closes: #845177.
--
Autotools hint: to do a zx-spectrum build on a pdp11 host, type:
./configure --host=zx-spectrum --build=pdp11
On Fri, Jan 20, 2017 at 02:16:11PM +0100, Adam Borowski wrote:
On Fri, Jan 20, 2017 at 12:04:12AM +0100, Adam Borowski wrote:
quoted
On Thu, Jan 19, 2017 at 05:33:14PM +0100, Greg KH wrote:
quoted
On Thu, Jan 19, 2017 at 05:12:15PM +0100, Manuel Schölling wrote:
quoted
On Thu, 2017-01-19 at 14:23 +0100, Greg KH wrote:
quoted
On Fri, Jan 13, 2017 at 09:07:57PM +0100, Manuel Schölling wrote:
quoted
+ This feature might break your tool of choice to flush
the scrollback
+ buffer, e.g. clear(1) will work fine but Debian's
clear_console(1)
+ will be broken, which might cause security issues.
+ You can use the escape sequence \e[3J instead if this
feature is
+ activated.
I'd recommend that patch get to clear_console() first, having it use the
new escape sequence, if it isn't supported, shouldn't cause any
problems, right?
doko: would you consider, pretty please with a cherry on top, applying the
patch I've sent to this bug? The privacy/security issue is pretty minor and
applies only to a tiny fraction of users, but I understand why Greg is
reluctant.
# Subject: Bug#845177 closed by Matthias Klose [off-list ref]
#
# This is an automatic notification regarding your Bug report
# which was filed against the bash package:
#
# #845177: clear_console: assumes VT switch clears scrollback
#
# It has been closed by Matthias Klose [off-list ref].
[...]
# Changes:
# * clear_console: Securely erase the current console. Closes: #845177.
This means it was accepted? Or rejected?
confused,
greg k-h
From: Adam Borowski <hidden> Date: 2017-01-20 14:28:01
On Fri, Jan 20, 2017 at 02:31:56PM +0100, Greg KH wrote:
On Fri, Jan 20, 2017 at 02:16:11PM +0100, Adam Borowski wrote:
quoted
On Fri, Jan 20, 2017 at 12:04:12AM +0100, Adam Borowski wrote:
quoted
On Thu, Jan 19, 2017 at 05:33:14PM +0100, Greg KH wrote:
quoted
I'd recommend that patch get to clear_console() first, having it use the
new escape sequence, if it isn't supported, shouldn't cause any
problems, right?
# Subject: Bug#845177 closed by Matthias Klose [off-list ref]
#
# This is an automatic notification regarding your Bug report
# which was filed against the bash package:
#
# #845177: clear_console: assumes VT switch clears scrollback
#
# It has been closed by Matthias Klose [off-list ref].
[...]
# Changes:
# * clear_console: Securely erase the current console. Closes: #845177.
This means it was accepted? Or rejected?
Accepted.
It's in unstable (or will be in the next mirror pulse), we're at the fastest
possible moment to get stuff to the next stable release -- it'll be in
Stretch (about to freeze). Ubuntu migration is currently open so it'll get
there soon, in time for Zesty (17.04). Other Debian derivatives likewise
pull at their own pace.
Most distributions unrelated to Debian don't seem to ship clear_console but
I have no real idea: just checked Fedora 25, it doesn't have it in the
default install at least.
Meow!
--
Autotools hint: to do a zx-spectrum build on a pdp11 host, type:
./configure --host=zx-spectrum --build=pdp11
From: Adam Borowski <hidden> Date: 2017-01-19 19:14:17
On Thu, Jan 19, 2017 at 05:12:15PM +0100, Manuel Schölling wrote:
On Thu, 2017-01-19 at 14:23 +0100, Greg KH wrote:
quoted
On Fri, Jan 13, 2017 at 09:07:57PM +0100, Manuel Schölling wrote:
quoted
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent. The buffers are allocated on demand when a new
console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
This issue is the one that makes me the most worried. Why doesn't
clear_console() work anymore? Why doesn't it use \e[3J ?
Well, clear_console() just switches from one console to another and
back again. It just assumes that the scrollback buffer is flushed when
switching.
My plan is to make a patch for clear_console() as soon as these patches
are in the kernel - it's chicken-and-egg problem.
No need to wait, \e[3J is supported since Linux 2.6.39; the problem I
spotted was that a previous version of your patch would break that.
It is also safe to output that sequence to a terminal unconditionally: I've
tested a number of terminals, they all either support it (most X terminals,
our console) or silently ignore it.
We can't, though, rely on terminfo to do so: it knows about this capability
(which it calls "E3") for TERM=linux only since very recently. The TERM
variable is also unreliable: it fails to carry over a serial link while
blindly printing \e[3J works.
As for patching clear_console, https://bugs.debian.org/845177 has a minimal
fix; although for all setups supported by Debian that program could be be
better replaced with just "printf '\e[3J\e[2J'" which would make it work on
strictly more terminals than current code does. Same for distributions
which copied clear_console (it originates from Ubuntu, maintained in Debian
since then).
Meow!
--
Autotools hint: to do a zx-spectrum build on a pdp11 host, type:
./configure --host=zx-spectrum --build=pdp11
From: Manuel Schölling <hidden> Date: 2017-01-13 20:09:07
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
---
drivers/video/console/Kconfig | 12 +++++++-----
drivers/video/console/vgacon.c | 25 ++++++++++++-------------
2 files changed, 19 insertions(+), 18 deletions(-)
@@ -47,14 +47,16 @@ config VGACON_SOFT_SCROLLBACK_SIZEbuffersofVGAconsoles.Each64KBwillgiveyouapproximately1680x25screenfulsofscrollbackbuffer.-configVGACON_SOFT_SCROLLBACK_PERSISTENT-bool"Persistent Scrollback History for each console"+configVGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT+bool"Persistent Scrollback History for each console by default"depends onVGACON_SOFT_SCROLLBACKdefaultnhelp-SayYhereifthescrollbackhistoryshouldpersistwhenswitching-betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed-eachtimetheconsoleisswitched.+SayYhereifthescrollbackhistoryshouldpersistbydefaultwhen+switchingbetweenconsoles.Otherwise,thescrollbackhistorywillbe+flushedeachtimetheconsoleisswitched.Thisfeaturecanalsobe+enabledusingthebootcommandlineparameter+'vgacon.scrollback_persistent=1'.Thisfeaturemightbreakyourtoolofchoicetoflushthescrollbackbuffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)
From: Manuel Schölling <hidden> Date: 2017-01-13 20:09:08
This refactoring is in preparation for persistent scrollback
support for VGA console.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/vgacon.c | 91 ++++++++++++++++++++++--------------------
1 file changed, 47 insertions(+), 44 deletions(-)
@@ -287,13 +290,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback_size-soff);-scr_memcpyw(d,vgacon_scrollback+soff,copysize);+copysize=min(count,vgacon_scrollback.size-soff);+scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback,count);+scr_memcpyw(d,vgacon_scrollback.data,count);d+=count;}
From: Manuel Schölling <hidden> Date: 2017-01-13 20:09:25
This new callback is in preparation for persistent scrollback buffer
support for VGA consoles.
With a single scrollback buffer for all consoles, we could flush the
buffer just by invocating consw->con_switch(). But when each VGA console
has its own scrollback buffer, we need a new callback to tell the
video console driver which buffer to flush.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/tty/vt/vt.c | 9 +++++++++
drivers/video/console/vgacon.c | 24 +++++++++++++++++++++++-
include/linux/console.h | 4 ++++
3 files changed, 36 insertions(+), 1 deletion(-)
@@ -305,6 +315,14 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)}elsevgacon_cursor(c,CM_MOVE);}++staticvoidvgacon_flush_scrollback(structvc_data*c)+{+size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;++if(c->vc_num=fg_console)+vgacon_scrollback_reset(size);+}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)
From: Paul Gortmaker <hidden> Date: 2017-02-02 20:07:35
On Tue, Jan 10, 2017 at 4:28 PM, Manuel Schölling
[off-list ref] wrote:
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
---
[...]
+module_param_named(scrollback_persistent, scrollback_persistent, bool, 0000);
+MODULE_PARM_DESC(scrollback_persistent, "Enable persistent scrollback for all vga consoles");
Since this hasn't got widespread deployment yet and only exists
in Greg's tree, can we please fix the above to use setup_param or
similar, since there is nothing modular about this code at all.
Thanks.
Paul.
From: Manuel Schölling <hidden> Date: 2017-02-03 16:06:11
Hi Paul,
On Thu, 2017-02-02 at 15:07 -0500, Paul Gortmaker wrote:
On Tue, Jan 10, 2017 at 4:28 PM, Manuel Schölling
[off-list ref] wrote:
quoted
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command
line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
Signed-off-by: Manuel Schölling <redacted>
Suggested-by: Bartlomiej Zolnierkiewicz <redacted>
---
[...]
quoted
+module_param_named(scrollback_persistent, scrollback_persistent,
bool, 0000);
+MODULE_PARM_DESC(scrollback_persistent, "Enable persistent
scrollback for all vga consoles");
Since this hasn't got widespread deployment yet and only exists
in Greg's tree, can we please fix the above to use setup_param or
similar, since there is nothing modular about this code at all.
Not sure what you mean here.
If this is not the right may to declare it I'd be more than happy to
change this. But I could not find any function/macro named setup_param
[1].
It would be great if you could give me a hint what function to use
here!
Have a great weekend!
Manuel
[1] http://lxr.free-electrons.com/ident?i=setup_param
From: Adam Borowski <hidden> Date: 2017-02-03 16:46:49
On Fri, Feb 03, 2017 at 05:04:15PM +0100, Manuel Schölling wrote:
On Thu, 2017-02-02 at 15:07 -0500, Paul Gortmaker wrote:
quoted
On Tue, Jan 10, 2017 at 4:28 PM, Manuel Schölling
[off-list ref] wrote:
quoted
The impact of the persistent scrollback feature on the code size is
rather small, so the config option is removed. The feature stays
disabled by default and can be enabled by using the boot command
line
parameter 'vgacon.scrollback_persistent=1' or by setting
VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y.
[...]
quoted
+module_param_named(scrollback_persistent, scrollback_persistent,
bool, 0000);
+MODULE_PARM_DESC(scrollback_persistent, "Enable persistent
scrollback for all vga consoles");
Since this hasn't got widespread deployment yet and only exists
in Greg's tree, can we please fix the above to use setup_param or
similar, since there is nothing modular about this code at all.
Not sure what you mean here.
If this is not the right may to declare it I'd be more than happy to
change this. But I could not find any function/macro named setup_param
[1].
It would be great if you could give me a hint what function to use
here!
[1] http://lxr.free-electrons.com/ident?i=setup_param
That shows only exact matches.
You want "git grep setup_param", which shows __setup_param() plus some
unrelated stuff. I see only four uses in the kernel, but that's enough
to see how to use it.
Meow!
--
Autotools hint: to do a zx-spectrum build on a pdp11 host, type:
./configure --host=zx-spectrum --build=pdp11
From: Manuel Schölling <hidden> Date: 2017-01-10 21:30:23
This new callback is in preparation for persistent scrollback buffer
support for VGA consoles.
With a single scrollback buffer for all consoles, we could flush the
buffer just by invocating consw->con_switch(). But when each VGA console
has its own scrollback buffer, we need a new callback to tell the
video console driver which buffer to flush.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/tty/vt/vt.c | 9 +++++++++
drivers/video/console/vgacon.c | 24 +++++++++++++++++++++++-
include/linux/console.h | 4 ++++
3 files changed, 36 insertions(+), 1 deletion(-)
@@ -305,6 +315,14 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)}elsevgacon_cursor(c,CM_MOVE);}++staticvoidvgacon_flush_scrollback(structvc_data*c)+{+size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;++if(c->vc_num=fg_console)+vgacon_scrollback_reset(size);+}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)
From: Manuel Schölling <hidden> Date: 2017-01-05 11:35:48
This refactoring is in preparation for persistent scrollback
support for VGA console.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/vgacon.c | 91 ++++++++++++++++++++++--------------------
1 file changed, 47 insertions(+), 44 deletions(-)
@@ -287,13 +290,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback_size-soff);-scr_memcpyw(d,vgacon_scrollback+soff,copysize);+copysize=min(count,vgacon_scrollback.size-soff);+scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback,count);+scr_memcpyw(d,vgacon_scrollback.data,count);d+=count;}
From: Manuel Schölling <hidden> Date: 2017-01-02 14:28:04
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
--
Changes in v7:
- Add new callback to consw struct for flushing video console driver's
scrollback buffer. Fixes issues with escape sequence '\e[3J' reported
by Adam Borowski (kilobyte@angband.pl).
- Fix style issues
Changes in v6:
- Change of check if feature is enabled in
vgacon_scrollback_switch()
Changes in v5:
- Clearify documentation
- Skip superfluous array initialization
- Disable scrollback if buffer allocation fails
- Refactor vgacon_switch_scrollback()
- Rename vgacon_switch_scrollback() to vgacon_scrollback_switch()
- Add check for fg_console in vgacon_scrollback_update
Changes in v4.1:
- Fix compiler error
Changes in v4:
- Rename from VGACON_SOFT_SCROLLBACK_FOR_EACH_CONSOLE to
VGACON_SOFT_SCROLLBACK_PERSISTENT
- Split into two patches
- Rework documentation
- Remove cosmetic changes in comments (postponed)
Changes in v3:
- Add config option for this feature
- Fallback to old scrollback buffer if kcalloc() fails
- Remove ioctl() call again and add documentation about existing
escape sequence to flush the scrollback buffer
Changes in v2:
- Add ioctl() call to flush scrollback buffer
- (Patch v2 was not labeled as such, sorry)
Manuel Schölling (3):
console: Move scrollback data into its own struct
console: Add callback to flush scrollback buffer to consw struct
console: Add persistent scrollback buffers for all VGA consoles
drivers/tty/vt/vt.c | 9 +++
drivers/video/console/Kconfig | 25 ++++++-
drivers/video/console/vgacon.c | 165 ++++++++++++++++++++++++++++-------------
include/linux/console.h | 4 +
4 files changed, 148 insertions(+), 55 deletions(-)
--
2.1.4
From: Manuel Schölling <hidden> Date: 2017-01-02 14:28:05
Add a scrollback buffers for each VGA console. The benefit is that
the scrollback history is not flushed when switching between consoles
but is persistent.
The buffers are allocated on demand when a new console is opened.
This breaks tools like clear_console that rely on flushing the
scrollback history by switching back and forth between consoles
which is why this feature is disabled by default.
Use the escape sequence \e[3J instead for flushing the buffer.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/Kconfig | 25 +++++++-
drivers/video/console/vgacon.c | 142 ++++++++++++++++++++++++++---------------
2 files changed, 111 insertions(+), 56 deletions(-)
@@ -43,9 +43,28 @@ config VGACON_SOFT_SCROLLBACK_SIZErange11024default"64"help-EntertheamountofSystemRAMtoallocateforthescrollback-buffer.Each64KBwillgiveyouapproximately1680x25-screenfulsofscrollbackbuffer+EntertheamountofSystemRAMtoallocateforscrollback+buffersofVGAconsoles.Each64KBwillgiveyouapproximately+1680x25screenfulsofscrollbackbuffer.++configVGACON_SOFT_SCROLLBACK_PERSISTENT+bool"Persistent Scrollback History for each console"+depends onVGACON_SOFT_SCROLLBACK+defaultn+help+SayYhereifthescrollbackhistoryshouldpersistwhenswitching+betweenconsoles.Otherwise,thescrollbackhistorywillbeflushed+eachtimetheconsoleisswitched.++Thisfeaturemightbreakyourtoolofchoicetoflushthescrollback+buffer,e.g.clear(1)willworkfinebutDebian'sclear_console(1)+willbebroken,whichmightcausesecurityissues.+Youcanusetheescapesequence\e[3Jinsteadifthisfeatureis+activated.++NotethatabufferofVGACON_SOFT_SCROLLBACK_SIZEistakenforeach+createdttydevice.+SoifyouuseaRAM-constrainedsystem,sayNhere.configMDA_CONSOLEdepends on!M68K&&!PARISC&&ISA
@@ -300,13 +336,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback.size-soff);-scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);+copysize=min(count,vgacon_scrollback_cur->size-soff);+scr_memcpyw(d,vgacon_scrollback_cur->data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback.data,count);+scr_memcpyw(d,vgacon_scrollback_cur->data,count);d+=count;}
@@ -320,13 +356,13 @@ static void vgacon_flush_scrollback(struct vc_data *c){size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;-if(c->vc_num=fg_console)-vgacon_scrollback_reset(size);+vgacon_scrollback_reset(c->vc_num,size);}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)#define vgacon_scrollback_update(...) do { } while (0)+#define vgacon_scrollback_switch(...) do { } while (0)staticvoidvgacon_restore_screen(structvc_data*c){
@@ -805,7 +841,7 @@ static int vgacon_switch(struct vc_data *c)vgacon_doresize(c,c->vc_cols,c->vc_rows);}-vgacon_scrollback_init(c->vc_size_row);+vgacon_scrollback_switch(c->vc_num);return0;/* Redrawing not needed */}
From: Manuel Schölling <hidden> Date: 2017-01-02 14:28:32
This new callback is in preparation for persistent scrollback buffer
support for VGA consoles.
With a single scrollback buffer for all consoles, we could flush the
buffer just by invocating consw->con_switch(). But when each VGA console
has its own scrollback buffer, we need a new callback to tell the
video console driver which buffer to flush.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/tty/vt/vt.c | 9 +++++++++
drivers/video/console/vgacon.c | 24 +++++++++++++++++++++++-
include/linux/console.h | 4 ++++
3 files changed, 36 insertions(+), 1 deletion(-)
@@ -305,6 +315,14 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)}elsevgacon_cursor(c,CM_MOVE);}++staticvoidvgacon_flush_scrollback(structvc_data*c)+{+size_tsize=CONFIG_VGACON_SOFT_SCROLLBACK_SIZE*1024;++if(c->vc_num=fg_console)+vgacon_scrollback_reset(size);+}#else#define vgacon_scrollback_startup(...) do { } while (0)#define vgacon_scrollback_init(...) do { } while (0)
From: Manuel Schölling <hidden> Date: 2017-01-02 14:28:33
This refactoring is in preparation for persistent scrollback
support for VGA console.
Signed-off-by: Manuel Schölling <redacted>
Reviewed-by: Andrey Utkin <redacted>
Tested-by: Andrey Utkin <redacted>
Tested-by: Adam Borowski <redacted>
---
drivers/video/console/vgacon.c | 91 ++++++++++++++++++++++--------------------
1 file changed, 47 insertions(+), 44 deletions(-)
@@ -287,13 +290,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)count*=c->vc_size_row;/* how much memory to end of buffer left? */-copysize=min(count,vgacon_scrollback_size-soff);-scr_memcpyw(d,vgacon_scrollback+soff,copysize);+copysize=min(count,vgacon_scrollback.size-soff);+scr_memcpyw(d,vgacon_scrollback.data+soff,copysize);d+=copysize;count-=copysize;if(count){-scr_memcpyw(d,vgacon_scrollback,count);+scr_memcpyw(d,vgacon_scrollback.data,count);d+=count;}