> It does that "tty_buffer_request_room()" call and subsequent copying with > no locking at all - sure, the tty_buffer_request_room() function itself > locks the buffers, but then unlocks it when returning, so when we actually > do the memcpy() etc, we can race with anybody. The tty_buffer_request_room() is a hint to help better allocation. It's also only safe to run from the receiving path of the driver (which has always been assumed not to make two parallel calls to the function at once. There is a simple reason the locking is sufficient. If you can call the function from two places at once in your serial driver at the same you've scrambled the data order so you've already lost. So - not a bug - and the lock changes don't actually "fix" any behaviour either because the ordering must be imposed by the caller. > pointless: they then call tty_insert_flip_string(), which means that the > tty_buffer_request_room() call was totally redundant ] It's a performance tweak. With a 3G USB modem or similar device running at 20Mbits or more being able to generate one allocation per chunk received for DMA made a measurable performance difference on some platforms. Alan -- To unsubscribe from this list: send the line "unsubscribe kernel-testers" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html