Projet de conversion busdma et SMPng
Table des matières
- But du projet
- Ressources et liens
- Etat du support des plates-formes
- Etat des pilotes interfaces réseaux
- Etat des pilotes périphériques de stockage
- Etat des pilotes périphériques divers
- Etat de la documentation
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 |