Comment puis-je mettre en pause pour+ de 100 millisecondes dans un pilote linux module?

Je suis en train d'écrire un pilote de noyau pour un appareil qui produit régulièrement des quantités de données pour la lecture périodiquement. Dans l'espace utilisateur du programme est parfaitement adapté à la réalisation de ce blocage pilote.

Quelles méthodes sont disponibles pour mettre en pause n'importe où de 4 à 100ms dans un pilote (c'est à dire faire le "bloc")? Dans l'espace utilisateur, je ferais quelque chose qui ressemble à:

tv.tv_sec  = microsecond_delay /1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);

ou

gettimeofday(tv,NULL);

et de comparer les structures.

[Modifier mon propre réponse]

Je vais utiliser le code suivant dans mon chauffeur:

#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);

Le tour est joué! Je vais maintenant tester ...

Les réponses sont les bienvenues, mais je viens de trouver ceci
En fait, pas ce que je cherche: je veux dormir un certain temps, de ne pas créer un asynchrones événement de minuterie.
Trouvé: extern signed long schedule_timeout(signed long timeout);
Double Possible de Comment dormir dans le noyau Linux?
De vérifier la date. J'ai demandé en premier.

OriginalL'auteur Jamie | 2011-09-09