From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Alexander N. Kozhushkin" Date: Sun, 12 Sep 2004 00:33:13 +0000 Subject: Re: [linux-usb-devel] Hotplug Driver Interface to User Level Programs: A Message-Id: <41439949.C403080C@grave.users.botik.ru> MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------FC3FDC67B2CD0D7969092EBC" List-Id: References: <412431DB.DCC65347@grave.users.botik.ru> In-Reply-To: <412431DB.DCC65347@grave.users.botik.ru> To: linux-hotplug@vger.kernel.org This is a multi-part message in MIME format. --------------FC3FDC67B2CD0D7969092EBC Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Alan Stern wrote: > > On Thu, 19 Aug 2004, Alexander N. Kozhushkin wrote: > > > My experience of using Linux kernels 2.6 shows that there is some > > problem with hotplug devices. Namely, it seems that, there is no > > uniform approach of how an application performing I/O operations on a > > device must be handled, when that device is disconnected. > > > > The following consideration explains the problem. Consider a > > process, which is performing a system call with a file descriptor as > > an argument. The file descriptor corresponds to a device special > > file, and the device was disconnected after the descriptor was > > created. > > There are three reasonable ways by which the process can be handled: > > 1. If the call involves an I/O operation on the device, the process > > hangs indefinitely until a signal has terminated the call or the > > process. > > 2. If the call involves an I/O operation on the disconnected device, > > the process waits for the device. As soon as the device is > > connected again, an initialization procedure will put the device > > into an appropriate state and will make the stopped process > > continue. If the call does not involve I/O operations on the > > device, it is performed without waiting, as if the device is > > presented. In any case the process is able to complete the call > > successfully. > > 3. The call completes without waiting for the device. The file > > descriptor has been unusable for I/O operations on the device since > > the disconnection, therefore the result of the call is not affected > > if the device has been connected again. The result of the call > > depends on the kind of the called function and other conditions. > > However, the 'close' function closes the file, and there are system > > calls which produce a specific error code in such situations. > > > > In addition to the above, in many cases it is useful to deliver a > > signal to a selected process at the moment when the device becomes > > disconnected. > > > > The choice of the standard affects not only the kernel itself, but > > also applications. The third approach looks like the most reasonable > > one, it is proposed in the 'drivers/usb/usb-skeleton.c' file, however, > > all of the approaches above are in use now. > > > > Which approach is the standard one or is supposed to be the standard? > > > > What is the standard behavior of the 'read()', 'write()', 'ioctl()', > > 'select()', 'fcntl()', 'close()', ... system calls in such a > > situation? > > As I understand it, the kernel should always use your option 3. I'm not > aware that any of the other options are in use anywhere; can you provide a > list? > > Alan Stern > Certainly USB should do it that way in 2.6, although the device > drivers can try to implement other behavior. I think that's made > a big improvement in robustness. > > David Brownell Hi, Unfortunately, now I cannot present a full list of device drivers which use the first and second approaches. However, the "drivers/input/mousedev.c" file by Vojtech Pavlik is an example of such a device driver. It offers the first approach for the mouse-like devices with the minor numbers from 0 to 30, and the second one for the so-called "MOUSEDEV_MIX" device with minor number 31. Here is a patch for kernel 2.6.7 which makes that driver use the third approach for the devices with minor numbers 0--30. Most likely, the patch can be used for kernels 2.6.8 and 2.6.9 too. The archive "tests.tgz" contains some very simple programs to test the patch and the original mouse driver. The description of the changes to the "mousedev.c" file can be found in the "patch.txt" file. The 'gpm' program, properly rewritten by me to support hotplug mice, and the above tests work reliably on my computer with the modified mouse driver. The X-server works reliably too if it uses the data supplied by the modified version of the 'gmp', instead of the real mouse data. Sincerely yours, Alexander. -- ********************************************************* Alexander N. Kozhushkin. ADDR: alex@grave.users.botik.ru ********************************************************* --------------FC3FDC67B2CD0D7969092EBC Content-Type: application/x-gzip; name="patch.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="patch.gz" H4sICPCHGkEAA3BhdGNoANVWbW/bNhD+7PyKS4E5kiI7jm3Fab0UcNug85rYgdNsH4aBkGXK ISJTAknZyZr+9x1JSX5pUxjol42AZerEO94999yRnudBwnj+2Gg3z5q9k5lgSyrkCeNZrk4W aS7pjC6bUTMVbF77k85gkM/h9BTarTed12+6r3HS6h40Go29zOxYCLpvgo614G0PkCpULIJl ymZQ6pNYUOpIJfJIlUKtCO0g8Ntnp6A1DwC+4K+G62NJBF2kS+q82nDkl9krvzLZeLtgPBVu X6tESSglkWyRJZTgRxbR0sD1pw+XfzjD0c3dZ3I9+H088eF6fHd7iVJyPRyNJ+Td4PYSjr8x jJYbUKsiUOE0oX/tLPobLmB0d3VlnHgwQZYrjGNf8WcgtnG2AOeNlxCTkv1DiVqDthJMVajF LDGIdXpnfue8QEyb7vQCFLStaXQj55LNOWYrug8FRP0tGeMKmBYdHEONxc4hJl8qjKaKiz6i AFwQVOWCQ+NyNEao+nDiARKDxU+g7kOFDwoWaFiFkh8pyHmW5PM5buKdoHW9bZwKcBhi1OoD g18hSnOucHp87JpU6zXoBThzqgg6IJzIh2kex1RgQpjr/hxU3e6p3w3aJble0hU0nG2oUvDM n28BJMYxlFm/fCjUTSw+JGkc45uXZal0SwZvE31JNMbgmeeFsd14m2GdhQrJGqrQpEhnBjFf honBq0BHg3NoU6TdfIJ6HYr3AicUONZkTOIknEuow5iMxqN3V+P3n1zXYFwlc/BxMBwZ44dQ q7ZbhUwRuqRcEXSDCpFniiHdnV1y6IU+bPrz/Ayb7ribjlv7Wx5YUd8Qt9ttY3rOSuL+h9Nz bNPj6cW2Pi6g/g045otrKmUwnQosDgwo5aCr4KXVWCr/29xrM3rALgn0++EaLOTEYdFsNhD8 2Q6zF81eaB9b7bCiQZYmSUE02z56yM9eb91pu9h6u+dB1Wm1AtGwOJaQ9e9Dpp/2mNLe/qh4 NkO4GV9dDUfwbCaTD3hQXWsiai4iUJlIFY0sSEeSJjh33COIRbow+zE+x+BmNGYcG2PyBLj1 NqBrNJu2Ye91HDjam8vJpPDrZjJ0+0WzL1a0qnNvr4vBjMko5Vz7X5QlM+AHnZYfdM7X4OOL HwRr8HeKGLxqdgH3IZ9tVHFZULtRmVqzeH6+ZxKy1FQArFiSAMeaEDCloHV80Gc7MGWKWQMZ 5wL/hP4KPF2VGO5/XSj5sF6SZpTrcxHNQDFe7lT94vDUtyMSJaks7z2ODd6kpVYzjzK+o9vh x+H4CDT5sfYLDkkTD8pkLtGDmeNWDNLBhqWaMaV9str7Um1Ko3RBJawTXTFud+i4CO5JaBjd E+xI4smUC1bWGiUr4OmMut8xoccDpo/EoXzikVOUpH3zwUTiG+qS3+5uDEi7YxU+UJJnO92w 7myXtWsr+ivQBBnwpbrJVKlasMemyaj59MNE/Qt7N7OFywsAAA== --------------FC3FDC67B2CD0D7969092EBC Content-Type: text/plain; charset=us-ascii; name="patch.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch.txt" I have made the following changes to the "drivers/input/mousedev.c" file: 1. 'mousedev_write()', 'mousedev_read()': The changes protect an application using the 'read()' function from waiting indefinitely for a disconnected mouse. If the application performs a read or write operation on the disconnected device, the call fails with the 'ENODEV' error code. This behavior of the 'read()' and 'write()' functions is proposed in the "drivers/usb/usb-skeleton.c" file. 2. 'mousedev_poll()': The changes protect an application using the 'select()' function from waiting indefinitely for a disconnected mouse. If the mouse was disconnected, each file descriptor of the respective device file is assumed to be always ready for reading. The device disconnection is assumed to be a permanent exceptional condition on the file descriptor. The 'select()' function treats that file descriptor as a valid and ready one. So if the file descriptor is contained in a descriptor set supplied to a 'select()' call as an argument, then the 'select()' function adds that file descriptor to the respective output descriptor set, i.e., sets the appropriate bit of the respective 'fd_set' input variable. In this case the function returns successfully. The mouse disconnection and the unusable file descriptor can be easily detected by checking the results of the successive 'read()' calls, which make use of the results of the 'select()' call, for the 'ENODEV' error. 3. 'mousedev_disconnect()': a) Sending a 'SIGIO' signal. This 'SIGIO' signal protects an application using the 'sigsuspend()' function from waiting indefinitely for a 'SIGIO' signal. If a file descriptor corresponds to a device special file representing a mouse, and the 'O_ASYNC' status flag is set on that file descriptor, a 'SIGIO' signal is generated when the mouse becomes disconnected. b) The pointers in the 'mousedev_table' are used only by the 'mousedev_open()' and 'mousedev_connect()' functions, so the 'mousedev_disconnect()' function can safely remove the pointer corresponding to the disconnected mouse from the 'mousedev_table'. 4. 'mousedev_free()': The line "mousedev_table[mousedev->minor] = NULL;" is moved into the 'mousedev_disconnect()' function. --------------FC3FDC67B2CD0D7969092EBC Content-Type: application/octet-stream; name="tests.tgz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tests.tgz" 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 YooppphiiumvSv8HVN1lNADIAAA= --------------FC3FDC67B2CD0D7969092EBC-- ------------------------------------------------------- This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170 Project Admins to receive an Apple iPod Mini FREE for your judgement on who ports your project to Linux PPC the best. Sponsored by IBM. Deadline: Sept. 13. Go here: http://sf.net/ppc_contest.php _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel