X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=fs%2Fselect.c;h=a201fc370223b01c918ae9767432c3060c6de95e;hb=25472b880c69c0daa485c4f80a6550437ed1149f;hp=8084834e123efed4e100fe030e2e26ced3ede1c9;hpb=3bb045f1e2e51124200ef043256df4c7ad86bebd;p=mv-sheeva.git diff --git a/fs/select.c b/fs/select.c index 8084834e123..a201fc37022 100644 --- a/fs/select.c +++ b/fs/select.c @@ -41,22 +41,28 @@ * better solutions.. */ +#define MAX_SLACK (100 * NSEC_PER_MSEC) + static long __estimate_accuracy(struct timespec *tv) { long slack; int divfactor = 1000; + if (tv->tv_sec < 0) + return 0; + if (task_nice(current) > 0) divfactor = divfactor / 5; + if (tv->tv_sec > MAX_SLACK / (NSEC_PER_SEC/divfactor)) + return MAX_SLACK; + slack = tv->tv_nsec / divfactor; slack += tv->tv_sec * (NSEC_PER_SEC/divfactor); - if (slack > 100 * NSEC_PER_MSEC) - slack = 100 * NSEC_PER_MSEC; + if (slack > MAX_SLACK) + return MAX_SLACK; - if (slack < 0) - slack = 0; return slack; }