freebsd-skq/sys/dev/cxgb
jhb a1af9ecca4 Rework socket upcalls to close some races with setup/teardown of upcalls.
- Each socket upcall is now invoked with the appropriate socket buffer
  locked.  It is not permissible to call soisconnected() with this lock
  held; however, so socket upcalls now return an integer value.  The two
  possible values are SU_OK and SU_ISCONNECTED.  If an upcall returns
  SU_ISCONNECTED, then the soisconnected() will be invoked on the
  socket after the socket buffer lock is dropped.
- A new API is provided for setting and clearing socket upcalls.  The
  API consists of soupcall_set() and soupcall_clear().
- To simplify locking, each socket buffer now has a separate upcall.
- When a socket upcall returns SU_ISCONNECTED, the upcall is cleared from
  the receive socket buffer automatically.  Note that a SO_SND upcall
  should never return SU_ISCONNECTED.
- All this means that accept filters should now return SU_ISCONNECTED
  instead of calling soisconnected() directly.  They also no longer need
  to explicitly clear the upcall on the new socket.
- The HTTP accept filter still uses soupcall_set() to manage its internal
  state machine, but other accept filters no longer have any explicit
  knowlege of socket upcall internals aside from their return value.
- The various RPC client upcalls currently drop the socket buffer lock
  while invoking soreceive() as a temporary band-aid.  The plan for
  the future is to add a new flag to allow soreceive() to be called with
  the socket buffer locked.
- The AIO callback for socket I/O is now also invoked with the socket
  buffer locked.  Previously sowakeup() would drop the socket buffer
  lock only to call aio_swake() which immediately re-acquired the socket
  buffer lock for the duration of the function call.

Discussed with:	rwatson, rmacklem
2009-06-01 21:17:03 +00:00
..
common Integrate three changes from Chelsio. 2009-05-21 15:08:03 +00:00
sys The pkthdr field is flowid not rss_hash 2008-12-02 00:51:56 +00:00
ulp Rework socket upcalls to close some races with setup/teardown of upcalls. 2009-06-01 21:17:03 +00:00
bin2h.pl Update the Chelsio driver to the latest bits from Chelsio 2009-03-10 19:22:45 +00:00
cxgb_adapter.h Integrate three changes from Chelsio. 2009-05-21 15:08:03 +00:00
cxgb_config.h Add backward compatibility ifdefs for non-multiq kernels 2008-11-23 07:30:07 +00:00
cxgb_include.h - Remove default NIC dependency on ulp headers 2008-09-24 01:19:08 +00:00
cxgb_ioctl.h Update the Chelsio driver to the latest bits from Chelsio 2009-03-10 19:22:45 +00:00
cxgb_main.c Rework interrupt bringup and teardown. 2009-05-27 20:13:36 +00:00
cxgb_multiq.c fix bug introduced by last change 2009-05-12 03:30:25 +00:00
cxgb_offload.c Minor updates to the Chelsio driver, including removing an LOR. 2009-03-23 19:58:26 +00:00
cxgb_offload.h - Remove default NIC dependency on ulp headers 2008-09-24 01:19:08 +00:00
cxgb_osdep.h Add backward compatibility ifdefs for non-multiq kernels 2008-11-23 07:30:07 +00:00
cxgb_sge.c Integrate three changes from Chelsio. 2009-05-21 15:08:03 +00:00
cxgb_t3fw.c Update the Chelsio driver to the latest bits from Chelsio 2009-03-10 19:22:45 +00:00
cxgb_t3fw.h Update the Chelsio driver to the latest bits from Chelsio 2009-03-10 19:22:45 +00:00
t3b_protocol_sram.h move remaining binaries in to blob headers 2008-02-26 23:05:05 +00:00
t3b_tp_eeprom.h move remaining binaries in to blob headers 2008-02-26 23:05:05 +00:00
t3c_protocol_sram.h Update the Chelsio driver to the latest bits from Chelsio 2009-03-10 19:22:45 +00:00
t3c_tp_eeprom.h Update the Chelsio driver to the latest bits from Chelsio 2009-03-10 19:22:45 +00:00
t3cdev.h MFSVN: 2008-05-05 01:41:53 +00:00