From: Dwight Engen <dwight.engen@xxxxxxxxxx> Date: Fri, 19 Sep 2014 09:43:02 -0400 > vio_dring_avail() will allow use of every dring entry, but when the last > entry is allocated then dr->prod == dr->cons which is indistinguishable from > the ring empty condition. This causes the next allocation to reuse an entry. > When this happens in sunvdc, the server side vds driver begins nack'ing the > messages and ends up resetting the ldc channel. This problem does not effect > sunvnet since it checks for < 2. > > The fix here is to just never allocate the very last dring slot so that full > and empty are not the same condition. The request start path was changed to > check for the ring being full a bit earlier, and to stop the blk_queue if > there is no space left. The blk_queue will be restarted once the ring is > only half full again. The number of ring entries was increased to 512 which > matches the sunvnet and Solaris vdc drivers, and greatly reduces the > frequency of hitting the ring full condition and the associated blk_queue > stop/starting. The checks in sunvent were adjusted to account for > vio_dring_avail() returning 1 less. > > Orabug: 19441666 > OraBZ: 14983 > > Signed-off-by: Dwight Engen <dwight.engen@xxxxxxxxxx> Applied. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html