Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Nov 2003 23:21:19 -0800 (PST)
From:      Bruce Evans <bde@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/dev/sio sio.c
Message-ID:  <200311170721.hAH7LJKO079434@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
bde         2003/11/16 23:21:19 PST

  FreeBSD src repository

  Modified files:
    sys/dev/sio          sio.c 
  Log:
  Tweaked the siointr1() so that it works better at 921600 bps, especially
  with multiple ports on a shared interrupt demultiplexed by the puc_intr()
  handler.
  
  siointr1() first read as much input as possible and then checked all
  possibly-relevant status registers, partly for robustness and partly
  for historical reasons.  This is very bad if it is called for every
  port sharing an interrupt like puc_intr() does.  It can spend too long
  reading all the input for some ports when the interrupt is for a more
  urgent event on another, or just too long checking all the status
  registers when there are lots of ports.  The inter-character time is
  too long for reading all the input even when the interrupt is for a
  transmitter interrupt on the same port, and at 921600 bps the inter-char
  time is 10.85 usec and was often exceeded with just 2 ports, leaving
  the transmitters idle for about 6% of the time.
  
  The tweak is to break out of the read loop after reading 1 char if
  output can be done.  This avoids most of the idle transmitter time for
  2 active ports at 921600 bps bidirectional on the test system.  It
  also reduces overhead by about 20%.  More complete fixes use the
  programmable tx low watermark on 16950's and reduce overhead by another
  65%.
  
  Revision  Changes    Path
  1.416     +5 -0      src/sys/dev/sio/sio.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200311170721.hAH7LJKO079434>