Em Tue, 02 Sep 2014 03:16:00 +0000 (GMT) Changbing Xiong <cb.xiong@xxxxxxxxxxx> escreveu: > > > Well, we may start returning -ENODEV when such event happens. > > > At the frontend, we could use fe->exit = DVB_FE_DEVICE_REMOVED to > > signalize it. I don't think that the demod frontend has something > > similar. > > > Yet, it should be up to the userspace application to properly handle > > the error codes and close the devices on fatal non-recovery errors like > > ENODEV. > > > So, what we can do, at Kernel level, is to always return -ENODEV when > > the device is known to be removed, and double check libdvbv5 if it > > handles such error properly. > > well, we do not use libdvbv5, The upstream stuff I maintain, related to it, are the media subsystems and libdvbv5. Of course, other apps will need to be patched as well. > and -ENODEV can be returned by read syscall, > but for poll syscall, Actually, poll() may return an error as well (from poll() manpage): "RETURN VALUE On success, a positive number is returned; this is the number of struc‐ tures which have nonzero revents fields (in other words, those descrip‐ tors with events or errors reported). A value of 0 indicates that the call timed out and no file descriptors were ready. On error, -1 is returned, and errno is set appropriately." So, if the Kernel returns -ENODEV, the glibc poll() wrapper would return -1 and errno will be ENODEV. Never actually tested if this works on poll() though. > -ENODEV can never be returned to user, as negative number > is invalid type for poll returned value. please refer to my second patch. > > and in our usage, whether to read the device is up to the poll result. if tuner is plugged out, > and there is no data in dvr ringbuffer. then user code will still go on polling the dvr device and never stop. > if POLLERR is returned, then user will perform read dvr, and then -ENODEV can be got, and > user will stop polling dvr device. Your app should be also be handling poll() errors, as there are already other errors that poll() can return. > the first patch is enough to fix the deadlock issue. > the second patch is used to correct the wrong type of returned value. > the third patch is used to provide user a better controlling logic. I'll take a deeper look and do some tests on your patches likely tomorrow. Regards, Mauro -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html