Skip site navigation (1) Skip section navigation (2)

Projet de conversion busdma et SMPng

Table des matières

But du projet

busdma

Les interfaces busdma permettent aux pilotes de périphériques matériels d'opérer sur une variété de plateformes, évitant le codage de méthodes spécifiques à la plateforme dans ces pilotes. Ceci fait baisser le coût de la maintenance des pilotes sur ces plateformes et accroît les chances qu'un pilote fonctionne "tel que" pour une nouvelle plateforme. Modifier un pilote pour qu'il utilise busdma est relativement simple, mais requiert d'être familiarisé à la fois avec le pilote de périphérique et les primitives busdma. Pour utiliser busdma dans FreeBSD, deux types de changements sont généralement requis : l'adaptation de busdma pour fonctionner sur toutes les plateformes et l'adaptation des pilotes pour utiliser cet environnement de travail. En tant que telle, l'information actuelle de ce projet de décompose en support de la plateforme et en support des pilotes (triés par catégorie). L'achèvement de ce travail requiert l'audit complet du système de pilotes de périphériques, puis la conversion des pilotes par priorités. Les pilotes doivent également utiliser les fonctions bus_space, et cette page est parfois utilisée pour indiquer qu'un pilote a aussi besoin d'une conversion à bus_space.

INTR_MPSAFE

Les pilotes du matériel enregistrent leur traitement d'interruptions avec la fonction bus_setup_intr(). Positionner le flag INTR_MPSAFE informe le code d'interruption système d'appeler la routine d'interruption sans détenir le mutex "Géant". Ceci permet d'obtenir un gain significatif de performances sur les systèmes multi-processeurs.

Les pilotes peuvent positionner ce flag même s'ils ne sont pas complètement verrouillés tant que leur routine d'interruption prend soin de ne pas toucher aux autres structures de données du pilote. Un moyen simple de réaliser cela est de vérifier et de vider les registres d'interruptions matérielles et ensuite ordonnancer le traitement des interruptions par une file d'attente de tâches ou un thread noyau.

verrou SMPng

Les pilotes doivent utiliser des mutex et des verrous sx pour protéger leurs structures de données et registres matériels des threads concurrents. Les opérations mutex sont assez coûteuses, aussi une bonne stratégie devrait combiner autant d'opérations atomiques que possible durant l'acquisition d'un seul mutex.

sécurité p!=a

Le support du PAE Intel requiert que les pointeurs et les représentations physiques des adresses soient de tailles différentes. Cela signifie que les pilotes doivent être écrits en utilisant vm_paddr_t ou bus_addr_t plutôt qu'en supposant que les adresses physiques puissent être représentées par un void *. De plus, le format des chaînes de caractères et les casts doivent être manipulés avec soin.

La liste des tâches ci-dessous ne prétend pas être exhaustive, mais représente une série de composants appropriés et/ou importants du travail global. Le champ "Responsable" identifie un développeur qui a exprimé le désir d'être responsable pour mener à bien la tâche identifiée; ce qui n'empêche pas les autres d'y travailler, mais suggère que la coordination avec le responsable de cette partie est recommandée pour éviter la duplication des travaux et optimiser l'avancement du travail. Si des travaux débutent sur une nouvelle partie importante, ou non assignée, il est conseillé d'envoyer un courrier électronique à Maxime Henrion pour vérifier si des progrès n'ont pas déjà été faits.

La définition du champ date varie en fonction de l'état de la tâche. Pour les tâches achevées, elle se réfère à la date d'achèvement ou du rapport d'achèvement. Pour les tâches en cours, elle se réfère à la date de la dernière mise à jour de l'entrée. Pour les tâches bloquées, elle se réfère à la date à laquelle elle a été déclarée bloquée. Pour les nouvelles tâches, elle se réfère à la date à laquelle elle a été ajoutée à la liste.

Les tâches sont triées par état, puis par date.

Ressources et liens

Une liste de pages de manuel liées à ce projet se trouve ici:

  • Extensions d'adressage physique - pae(4)
  • Interface de bus et de mapping DMA portable - bus_dma(9)
  • Partie non portable de la mémoire virtuelle (VM) - pmap(9)
  • Fonctions de gestion des ressources - rman(9)

Etat du support des plates-formes

Tâche Responsable Dernière mise à jour Etat Détails
alpha Bernd Walter 14 Novembre 2005 Fait Problèmes avec les systèmes disposant d'une grande quantité de mémoire
amd64 Peter Wemm 1er Juillet 2003 Fait Pleinement supporté.
arm Olivier Houchard 23 Décembre 2005 Fait Pleinement supporté.
ia64 Marcel Moolenaar 10 Décembre 2002 Fait Problèmes éventuels avec les systèmes disposant d'une grande quantité de mémoire
i386 Sam Leffler 9 Décembre 2002 Fait Pleinement supporté.
powerpc Peter Grehan 15 Janvier 2003 Fait Pleinement supporté.
sparc64 Thomas Möstl 6 Janvier 2003 Fait Pleinement supporté.

Etat des pilotes interfaces réseaux

Pilote Responsable Dernière mise à jour busdma INTR_MPSAFE SMPng locked a!=p Notes
if_an   23 Décembre 2005 Inconnu Inconnu Inconnu Inconnu  
if_ar     Pas fait Pas fait Pas fait Pas fait kvtop()
if_bge Bill Paul 13 Avril 2004 Fait Fait Fait Fait  
if_cp Roman Kurakin 31 Octobre 2005 Fait Fait Fait Pas fait  
if_cs Warner Losh 23 Décembre 2005 Pas fait Pas fait Pas fait Inconnu Nécessite une conversion bus_space
if_ct Roman Kurakin 31 Octobre 2005 Fait Fait Fait Pas fait  
if_cx Roman Kurakin 24 Juin 2004 Fait En progrès En progrès Pas fait  
if_dc Maxime Henrion 19 Août 2005 Fait Fait Fait Fait  
if_de Maxime Henrion 17 Août 2005 Fait Fait Fait Pas fait  
if_ed Warner Losh 23 Décembre 2005 Fait Fait Fait Fait  
if_em Prafulla S. Deuskar 13 Avril 2004 Fait Fait Fait Fait  
if_en Hartmut Brandt 2 Novembre 2005 Fait Pas fait Pas fait Fait Verrouillage présent; pas encore marqué INTR_MPSAFE?
if_ep Matthew N. Dodd,Warner Losh 13 Avril 2004 Fait Fait Fait Fait  
if_ex Warner Losh 23 Décembre 2005 Fait Pas fait Pas fait Fait  
if_fatm Hartmut Brandt 2 Novembre 2005 Fait Fait Fait Fait  
if_fwe     Pas fait Pas fait Pas fait Pas fait  
if_fxp Maxime Henrion 13 Avril 2004 Fait Fait Fait Fait  
if_gem Thomas Möstl 31 Juillet 2005 Fait Fait Fait Pas fait  
if_hatm Hartmut Brandt 2 Novembre 2005 Fait Fait Fait Fait vtophys()
if_hme Thomas Möstl 30 Janvier 2005 Fait Fait Fait Fait  
if_idt     Pas fait Pas fait Pas fait Pas fait vtophys()
if_le Marius Strobl 31 Janvier 2006 Fait Fait Fait Fait  
if_lge   23 Novembre 2005 Pas fait Fait Fait Pas fait vtophys()
if_lmc   11 Février 2006 Fait Fait Fait Inconnu Non testé sur PAE
if_mn     Pas fait Pas fait Pas fait Pas fait vtophys(). Contactez Poul-Henning Kamp pour info/matériel svp.
if_my   17 Aoû 2005 Pas fait Fait Fait Pas fait vtophys()
if_nge   17 Aoû 2005 Pas fait Fait Fait Pas fait vtophys()
if_nve   23 Novembre 2005 Pas fait Fait Fait Pas fait vtophys()
if_pcn David O'Brien 19 Août 2005 Pas fait Fait Fait Pas fait vtophys()
if_pdq     Pas fait Pas fait Pas fait Pas fait La plupart du busdma sauf vtophys().
if_re   30 Mai 2005 Fait Fait Fait Fait  
if_rl Bill Paul 13 Avril 2004 Fait Fait Fait Pas fait  
if_sf   19 Août 2005 Pas fait Fait Fait Pas fait vtophys()
if_sis Bill Paul 13 Avril 2004 Fait Fait Fait Pas fait  
if_sk   27 Avril 2006 Fait Fait Fait Pas fait vtophys()
if_sn Warner Losh 23 Décembre 2005 Fait Fait Fait Fait  
if_snc   23 Décembre 2005 Inconnu Inconnu Inconnu Inconnu uniquement sur pc98 (bien qu'il pourrait fonctionner avec de nombreux ponts cardbus)
if_sr     Pas fait Pas fait Pas fait Pas fait vtophys()
if_ste   31 Août 2005 Pas fait Fait Fait Pas fait vtophys()
if_ti   13 Décembre 2005 Fait Fait Fait Fait  
if_tl   15 Septembre 2005 Pas fait Fait Fait Pas fait  
if_tx Maxime Henrion 19 Avril 2003 Fait Pas fait Pas fait Nécessite des tests  
if_txp   22 Septembre 2005 En progrès Fait Fait Pas fait  
if_vr   23 Avril 2004 Pas fait Fait Fait Pas fait  
if_vx   22 Septembre 2005 Non Applicable Fait Fait Pas fait Utilise PIO pour copier les mbufs de/vers le matériel.
if_wb   22 Septembre 2005 Pas fait Fait Fait Pas fait  
if_wi Sam Leffler, Warner Losh 4 Novembre 2003 Inconnu Fait Inconnu Inconnu Ce pilote a besoin de beaucoup de travail
if_xe Warner Losh 23 Décembre 2005 Fait Fait Fait Fait  
if_xl Maxime Henrion 13 Avril 2004 Fait Fait Fait Fait  

Etat des pilotes périphériques de stockage

Pilote Responsable Dernière mise à jour busdma INTR_MPSAFE SMPng locked a!=p Notes
aac Scott Long 31 Janvier 2005 Fait Fait Fait Fait Problème avec l'endianness.
adv   9 Décembre 2002 Fait Pas fait Pas fait Pas fait  
aha   13 Avril 2004 Fait En progrès En progrès Pas fait Utilise BUSDMA, mais peut confondre l'adresse de bus avec l'adresse de l'hôte.
ahb   9 Décembre 2002 Fait Pas fait Pas fait Pas fait  
ahc Justin T. Gibbs 31 Janvier 2005 Fait Pas fait Pas fait Fait  
ahd Justin T. Gibbs 31 Janvier 2005 Fait Pas fait Pas fait Fait  
aic   23 Décembre 2005 Inconnu Inconnu Inconnu Inconnu Nécessite une évaluation
amd   14 Décembre 2002 Fait Pas fait Pas fait Pas fait  
amr Scott Long 30 Janvier 2005 Fait Fait Fait Fait  
asr   4 Janvier 2003 Pas fait Pas fait Pas fait Pas fait vtophys(). Nécessite beaucoup de travail. Une nouvelle infrastructure I2O serait souhaitable.
ata Søren Schmidt 9 Décembre 2002 Fait Fait Fait Fait  
buslogic     Pas fait Pas fait Pas fait Pas fait vtophys()
ciss   9 Décembre 2002 Fait Pas fait Pas fait Pas fait  
ct     Pas fait Pas fait Pas fait Pas fait  
dpt     Pas fait Pas fait Pas fait Pas fait vtophys()
fdc   23 Décembre 2005 Inconnu Inconnu Inconnu Inconnu Nécessite une évaluation
ida   9 Décembre 2002 Fait Pas fait Pas fait Pas fait  
iir   1er Mars 2006 Fait Fait Fait Fait Le DMA 64-bit sans rebond est possible, mais nécessite du travail.
isp   8 Février 2003 Fait Fait Pas fait Pas fait  
ips Scott Long 30 Janvier 2005 Fait Fait Fait Fait  
mlx Scott Long 8 Février 2003 Fait En progrès En progrès Pas fait  
mly Scott Long 8 Février 2003 Fait En progrès En progrès Pas fait  
mpt   9 Décembre 2002 Fait Fait Pas fait Pas fait  
ncr     Pas fait Pas fait Pas fait Pas fait vtophys(). Contactez Poul-Henning Kamp svp, pour une éventuelle source de matériel.
ncv     Inconnu Inconnu Inconnu Inconnu Nécessite une évaluation
nsp     Inconnu Inconnu Inconnu Inconnu Nécessite une évaluation
pst   11 Avril 2003 Pas fait Fait Pas fait Pas fait vtophys()
stg   9 Décembre 2002 Fait Pas fait Pas fait Pas fait Au moins, il semble être ce qu'il devrait être.
sym   19 Décembre 2002 Fait Pas fait Pas fait Pas fait  
trm Olivier Houchard 9 Décembre 2002 Fait Pas fait Pas fait Pas fait  
twe   9 Décembre 2002 Fait Pas fait Pas fait Pas fait  
wds   2 Février 2005 Fait Pas fait Pas fait Pas fait  

Etat des pilotes périphériques divers

Pilote Responsable Dernière mise à jour busdma INTR_MPSAFE SMPng locked a!=p Notes
agp   31 Octobre 2005 Pas fait Pas fait Pas fait Pas fait vtophys()
bktr Olivier Houchard 15 Janvier 2003 En progrès Pas fait Pas fait Pas fait vtophys()
digi     Pas fait Pas fait Pas fait Pas fait vtophys()
drm Eric Anholt 27 Octobre 2003 En progrès Fait Fait En progrès vtophys(). Le verrouillage pourrait bénéficier d'une revue.
fb     Pas fait Pas fait Pas fait Pas fait vtophys()
firewire Hidetoshi Shimokawa 17 Avril 2003 Fait Pas fait Pas fait Fait vtophys()
hfa     Pas fait Pas fait Pas fait Pas fait vtophys()
hifn Sam Leffler 13 Avril 2004 Fait Fait Fait Pas fait  
musycc     Pas fait Pas fait Pas fait Pas fait vtophys(). Contactez Poul-Henning Kamp pour info/matériel svp.
pcm Olivier Houchard 20 Février 2003 Fait Fait Pas fait Pas fait  
ubsec Sam Leffler 13 Avril 2004 Fait Fait Fait Pas fait vtophys() est utilisé par printf en débuggage.
usb John-Mark Gurney 24 Juillet 2003 Fait Pas fait Pas fait Nécessite des tests a!=p devrait être bon, mais nécessite des tests plus poussés.

Etat de la documentation

Tâche Responsable Dernière mise à jour Etat Notes
Pages de manuel pour l'API busdma Hiten Pandya 15 Janvier 2003 Fait