[PATCH v9 00/14] termios: support arbitrary baud rates on Linux, minor cleanups, alternative interface
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Mon Jun 16 17:32:52 GMT 2025
On 11/06/25 22:35, H. Peter Anvin wrote:
> From: "H. Peter Anvin" (Intel) <hpa@zytor.com>
>
> This is the arbitrary baud rates on Linux patchset, and the (proposed)
> "explicitly true baudrate" interface proposed for future
> standardization.
>
> It also includes some generic cleanups to the best of my ability, and
> removes USE_OLD_TTY from Hurd, which was the only remaining cause of
> speed_t not being an actual baud rate.
>
> A git tree is also available at:
> https://git.zytor.com/linux/glibc/ branch hpa/termios9
>
> Changes in v9:
>
> - Refactor <termios_internals.h>, <kernel_termios.h> and
> <old_termios.h> to put all the internals termios
> architecture-specific stuff for both kernel and user space in a
> single place <termios_arch.h> and avoid using architecture #ifdefs
> in the common code. (Andreas Schwab)
> - As the above change required opening up the "big patch" (v8 05/15)
> merge the pad clearing change (v8 06/15) back in (v9 05/14).
> - Extend the speed field unification to Linux/Alpha, which has its own
> <termios-struct.h> which got missed. (Adhemerval Zanella)
This version look good to me, and only the 05/14 patch has minos
nits that I don't think it is worth to send a new version. I created
a branch with the nits fixes [1] and if you are OK with this I can
install it.
Thanks for working on this.
[1] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/termios2
>
> Changes in v8:
>
> - Clear the pad bytes in struct termios, but don't make them explicit,
> because alignment and therefore the number of padding bytes is
> different on m68k. (Adhemerval Zanella)
> - Add array_foreach() and array_foreach_const() iterator macros
> to <array_length.h>.
> - Use array_foreach_const() in the test case instead of open-coding
> array_length() and using a counter. (Adhemerval Zanella)
> - Loop from 75 rather than 300 when doing the "standard baud rate
> series", mostly for clarity's sake.
>
> Changes in v7: (special thanks to Adhemerval Zanella for reviews)
>
> - Stylistic and typo fixes.
> - Add missing copyright headers.
> - Make the (already existing) padding field in struct termios explicit
> and make sure the full structure is initialized by tcgetattr(). This
> could help future expansion, and is just good practice.
> (Added as a separate patch in order to not invalidate previous
> reviews.)
> - Consistently use __BOTHER rather than BOTHER.
> - Simplify the test case by making better use of <support/check.h>
> macros. (Not quite as completely as Adhemerval had suggested, in
> order to get a little more information into certain error messages.)
>
> Changes in v6: (special thanks to Adhemerval Zanella for bug reports)
>
> - Fix the definition of CIBAUD on Alpha, and add explicit compile-time
> tests for CBAUD and CIBAUD validity.
> - Fix the PowerPC build (stray <bits/sockios.h> remained, rather than
> <linux/sockios.h>.)
> - Remove a spurious indentation change in <bits/termios-struct.h> on
> Linux.
> - Separate the unification of the B constants and the updating of the
> manual into separate patches.
> - Update the baud_t documentation to indicate that speed_t == baud_t
> is not going to be guaranteed in future versions, only that baud_t
> is a numeric type.
>
> Changes in v5.2:
>
> - tst-termios-linux: clean up the definition of the VERIFY and CHECK macros
> - make sure sysdeps/unix/sysv/linux/Makefile is sorted to prevent lint error
>
> Changes in v5:
>
> - Added test for various combinations of the legacy and new interfaces.
> - Fix several typos that caused major malfunctions, oops...
> - Added Signed-off-bys for the Hurd patches.
>
> Changes in v4:
>
> - Using <linux/sockios.h> instead of a copied <bits/sockios.h>.
> - __local_isatty() renamed __isatty_nostatus().
> - Use *_CALL() versions of the SYSCALL macros.
> - Fix USE_OLD_TTY removal on Hurd (missing #endif.)
> - Fix speed_t being signed on Hurd (should be unsigned per POSIX.)
> - Merge the speed_t constant definitions as they are now all identical.
> - Use anonymous unions to support both __ispeed/__ospeed and
> c_ispeed/c_ospeed on all platforms, for consistency.
> - All baud rate constants added to the manual.
>
> Changes in v3:
>
> - Fix improper use of tcsetattr() instead of __tcsetattr() in
> misc/getpass.c
> - The .abilist files need to be sorted
> - Move Hurd USE_OLD_TTY removal to before the *baud() interface patch
>
> NEWS | 4 +
> bits/termios-baud.h | 72 +++
> bits/termios.h | 54 +-
> include/array_length.h | 14 +
> include/termios.h | 27 +-
> include/unistd.h | 1 +
> io/Makefile | 1 +
> io/isatty_nostatus.c | 29 +
> libio/filedoalloc.c | 12 +-
> login/openpty.c | 2 +-
> manual/terminal.texi | 164 +++++-
> misc/getpass.c | 4 +-
> sysdeps/mach/hurd/bits/ioctls.h | 31 +-
> sysdeps/mach/hurd/i386/libc.abilist | 5 +
> sysdeps/mach/hurd/x86_64/libc.abilist | 5 +
> sysdeps/unix/bsd/tcsetattr.c | 6 +-
> sysdeps/unix/sysv/linux/Makefile | 2 +-
> sysdeps/unix/sysv/linux/Versions | 7 +
> sysdeps/unix/sysv/linux/aarch64/libc.abilist | 10 +
> .../unix/sysv/linux/alpha/bits/termios-c_cflag.h | 2 +
> .../alpha/bits/{termios-baud.h => termios-cbaud.h} | 43 +-
> .../unix/sysv/linux/alpha/bits/termios-struct.h | 11 +-
> sysdeps/unix/sysv/linux/alpha/kernel-features.h | 11 +
> sysdeps/unix/sysv/linux/alpha/kernel_termios.h | 43 --
> sysdeps/unix/sysv/linux/alpha/libc.abilist | 10 +
> .../bits/termios-struct.h => alpha/termios_arch.h} | 26 +-
> sysdeps/unix/sysv/linux/arc/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/arm/be/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/arm/le/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/bits/ioctls.h | 85 +--
> sysdeps/unix/sysv/linux/bits/termios-c_cflag.h | 4 +-
> .../linux/bits/{termios-baud.h => termios-cbaud.h} | 41 +-
> sysdeps/unix/sysv/linux/bits/termios-struct.h | 11 +-
> sysdeps/unix/sysv/linux/bits/termios.h | 50 +-
> sysdeps/unix/sysv/linux/cfsetspeed.c | 59 ++
> sysdeps/unix/sysv/linux/csky/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/hppa/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/i386/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/isatty.c | 28 +
> sysdeps/unix/sysv/linux/isatty_nostatus.c | 26 +
> sysdeps/unix/sysv/linux/kernel-features.h | 4 +
> .../unix/sysv/linux/loongarch/lp64/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/microblaze/be/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/microblaze/le/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/mips/Versions | 4 +
> .../unix/sysv/linux/mips/mips32/fpu/libc.abilist | 12 +
> .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist | 12 +
> .../unix/sysv/linux/mips/mips64/n32/libc.abilist | 12 +
> .../unix/sysv/linux/mips/mips64/n64/libc.abilist | 12 +
> .../{kernel_termios.h => mips/termios_arch.h} | 39 +-
> sysdeps/unix/sysv/linux/old_termios.h | 23 +
> sysdeps/unix/sysv/linux/or1k/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/powerpc/bits/ioctls.h | 36 ++
> .../unix/sysv/linux/powerpc/bits/termios-c_cflag.h | 4 +-
> .../bits/{termios-baud.h => termios-cbaud.h} | 42 +-
> sysdeps/unix/sysv/linux/powerpc/kernel_termios.h | 53 --
> .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist | 10 +
> .../linux/powerpc/powerpc32/nofpu/libc.abilist | 10 +
> .../sysv/linux/powerpc/powerpc64/be/libc.abilist | 10 +
> .../sysv/linux/powerpc/powerpc64/le/libc.abilist | 10 +
> .../termios-struct.h => powerpc/termios_arch.h} | 26 +-
> sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/sh/be/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/sh/le/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/sparc/Versions | 4 +
> .../sparc/bits/{termios-baud.h => termios-cbaud.h} | 39 +-
> sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist | 12 +
> sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist | 12 +
> .../kernel_termios.h => sparc/termios_arch.h} | 41 +-
> sysdeps/unix/sysv/linux/speed.c | 363 +++++++++++--
> sysdeps/unix/sysv/linux/tcgetattr.c | 86 ++-
> sysdeps/unix/sysv/linux/tcsetattr.c | 125 +++--
> sysdeps/unix/sysv/linux/termios_arch.h | 23 +
> sysdeps/unix/sysv/linux/termios_internals.h | 143 +++++
> sysdeps/unix/sysv/linux/tst-termios-linux.c | 592 +++++++++++++++++++++
> sysdeps/unix/sysv/linux/x86_64/64/libc.abilist | 10 +
> sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist | 10 +
> termios/Makefile | 7 +-
> termios/Versions | 4 +
> termios/baud.c | 56 ++
> .../sparc/kernel_termios.h => termios/cfsetbaud.c | 35 +-
> termios/cfsetspeed.c | 142 +----
> termios/speed.c | 18 +-
> termios/sys/ttychars.h | 4 -
> termios/tcsetattr.c | 5 +-
> termios/termios.h | 19 +-
> 91 files changed, 2356 insertions(+), 793 deletions(-)
More information about the Libc-alpha
mailing list