asm/vga.h and linux/vt_buffer.h are playing odd games that might or might not have made sense once upon a time, but currently they are too convoluted for no good reason. vt_buffer.h defines the primitives for access to vt contents - scr_{read,write,memcpy,memmove,memset}w(). In all cases it's an array of 16bit values - attribute/symbol pairs. Normally it's just a kmalloc'ed buffer; there are few exceptions: * vgacon.c has the active console contents directly in VRAM; for such consoles vt.c code will end up accessing that. * vgacon.c and mdacon.c use those to access the text-mode screen image directly in VRAM. VRAM is little-endian; for kmalloc'ed buffers the endianness is up to us - all accesses will be via scr_... primitives, so in absence of VGA_CONSOLE and MDA_CONSOLE we can simply keep them host-endian and turn the accessors into obvious inlines; that's the default. The few architectures that might have VGA_CONSOLE or MDA_CONSOLE may override that. Overrides are too convoluted - we have 4 macros (VT_BUF_HAVE_{RW,MEMCPYW,MEMSETW,MEMMOVEW}) asm/vga.h may define to control what gets overridden. Situation: * alpha: needs separate handling for mem and iomem cases, overrides everything. * arm: fine with defaults. * mips: keeps everything little-endian, nothing special needed for VRAM access. Overrides everything, replacements for memcpy/memmove are identical to defaults. * powerpc: more than slightly ridiculous - if VGA_CONSOLE or MDA_CONSOLE is enabled, same as mips, defaults otherwise. The ridiculous part is that VGA_CONSOLE is actually impossible to enable there, but MDA_CONSOLE (that is to say, support of ISA Hercules cards for the second monitor) *is* possible. On the boxen with ISA slots, that is... * sparc: overrides everything, replacements are all identical to defaults. Neither vgacon or mdacon are possible there, so that's fine, but why bother with overrides in the first place? * x86: fine with defaults. Defaults themselves are also overcomplicated - there's e.g. handling of the case when we'd overridden read/write, but not memcpy (which never happens). There are several other things in asm/vga.h, in addition to these overrides. One is the helpers for byte VRAM accesses - vga_{read,write}b(), used only by vgacon.c and only to read/modify the screen font. Hell knows whether it really needs to be done byte-by-byte; pointer is always to VRAM. Incidentally, the loops in there are just weird - 8192 bytes of iomem read or written one by one, with cond_resched() after each. Apparently, qemu with 64 vcpu managed to be stuck in that for more than a minute... Another thing is VGA_MAP_MEM() - finding where VRAM is mapped. Used by vgacon, mdacon and vga16fb (the last one - x86-only). All of those are provided by asm/vga.h on anything that might support any of the users, so there's no point keeping them in asm-generic/vga.h - as the matter of fact, that file can be empty, which would kill arch/sh/include/asm/vga.h. Patch series cleaning that up lives in git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git #work.vt_buffer Individual patches in followups; please, review. Shortlog: Al Viro (4): vt_buffer.h: get rid of dead code in default scr_...() instances asm/vga.h: don't bother with scr_mem{cpy,move}v() unless we need to sparc: get rid of asm/vga.h empty include/asm-generic/vga.h Diffstat: arch/mips/include/asm/vga.h | 4 --- arch/powerpc/include/asm/vga.h | 5 ---- arch/sh/include/asm/vga.h | 7 ----- arch/sparc/include/asm/vga.h | 60 ------------------------------------------ include/asm-generic/vga.h | 23 +--------------- include/linux/vt_buffer.h | 24 ----------------- 6 files changed, 1 insertion(+), 122 deletions(-) delete mode 100644 arch/sh/include/asm/vga.h delete mode 100644 arch/sparc/include/asm/vga.h