2010-05-04 10 views
0

Je suis déconner avec le noyau Linux 2.4 et la fonction schedule() dans sched.c utilise la macro prepare_arch_schedule, qui a l'air vraiment étrange. Qu'est-ce que c'est?Qu'est-ce que prepare_arch_schedule?

est ici la section pertinente

#ifndef prepare_arch_schedule 
# define prepare_arch_schedule(prev) do { } while(0) 
# define finish_arch_schedule(prev) do { } while(0) 
# define prepare_arch_switch(rq) do { } while(0) 
# define finish_arch_switch(rq)  spin_unlock_irq(&(rq)->lock) 
#endif 

Répondre

1

Je ne comprends toujours pas pourquoi vous pensez que c'est une boucle infinie :).

C'est un "hack" pour une instruction vide et la raison en est que le compilateur peut se plaindre quand il frappe une instruction vide. D'après ce que je comprends, le verrouillage du commutateur de contexte dépend de l'architecture et donc, pour les architectures pour lesquelles le verrouillage n'a pas été défini, cette instruction vide a été définie afin que vous n'ayez pas à modifier schedule() pour chaque architecture . D'où le #ifndef ...

+0

Ajout du code correspondant. – EpsilonVector

+0

pas vraiment si difficile à trouver ... http://git.kernel.org/?p=linux/kernel/git/wtarreau/linux-2.4.git;a=summary – Hasturkun

+0

@hasturkun Juste une faveur de plus: aller à le lien que vous avez fourni et trouvez la définition de prepare_arch_schedule(). (Vous ne le trouverez pas, il a été retiré depuis longtemps! Il y avait une raison pour laquelle j'ai demandé ce que j'ai demandé :)) – Bandan