[PATCHES][RFC] cleaning up asm/vga.h situation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



	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




[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux