������ ��������� ��������� FreeBSD � busdma � SMPng
����������
- ���� �������
- �������������� ������� � ������
- ��������� �� ��������� ��������
- ��������� �� ��������� ������� �����������
- ��������� �� ��������� ��������� ��������
- ��������� �� ��������� ������ ���������
- ��������� �� ����������������
���� �������
busdma
���������� busdma ��������� ��������� ���������� ��������� �������� �� ��������� ���������� ��� ������������� ����������� ����������� ��� ���������� �������� ������� ������� ��������������� � ���������. ��� ������� ������� �� ��������� ��������� ��� ������ ��������, � ����������� ����������� ����, ��� ������� ����� "������ ��������" �� ����� ���������. ����������� �������� ��� ������������� busdma �������� ���������� ������̣���� ���������, � �� ������� �������� ������ �� �������� ����������, �� ������� busdma. ��� busdma, ������������� �� FreeBSD, ��� �������, ��������� �������� ��������� ���� �����: ��������� ���������� busdma � ������ �� ���� ����������, � �������������� ��������� � ������������� ���� ����������. ����� �� ������� ���������� � ��������� ����� ������� ������� �� ��������� �������� � ��������� ��������� (��������������� �� ����������). ��� ���������� ���� ������ ��������� ���������� ����� ��������� ��������� ���������, � ����� ���������� ������ � �������������� ���������.
INTR_MPSAFE
�������� ������������ ������������ ���� ����������� ���������� ��� ������
������� bus_setup_intr()
. ��������� �����
INTR_MPSAFE
��������� ���� ��������� ���������� ������� ��
����� ţ ��������� ��� ��������� �������� Giant. ��� ���� ������������
������� ������������������ � SMP-��������.
�������� ����� ������������� ���� ����, ���� ���� ��� �� �������� ��������� ��������������, ���� ������ �� ���������� ���������� �� ���������� � ������ ���������� ������ � ��������. ������� �������� ���������� ��� �������� �������� � ����� ��������� ��������� ���������� ����������, � ����� ������������ ��������� ���������� � ������� ����� (taskqueue) ��� ������ ���������� ���� (kernel thread).
��������� SMPng
�������� ������ ������������ �������� � sx-���������� ��� ������ ����������� �������� ������ � ���������� ��������� �� ����������� ������������� �������. �������� � ���������� ��������� ������ϣ���, ��� ��� ������� ���������� �������� �������������� ����������� ���������� ���������� ��������� �������� � ���� �������� ������� ��������.
��������� p!=a
��������� Intel PAE �������, ����� ��������� � ���������� ������ ����� ������ ������. ��� ������, ��� �������� ������ ���� �������� � �������������� vm_paddr_t ��� bus_addr_t, ��� ������������� � ���, ��� ���������� ������ ����� ���� ������������ ��� ������ void *. ����� ����, ������ �������� � �������� ���������� ����� ������ ����������� � �������������.
�������� ����� ���� �� �������� ������, �� ������������ ����� ����� ������� ��������� � ���� �/��� ������ ����������� ����� ������. ���� "�������������" ���������� ������������, ������� ������� ������� �������� �� ���������� ���������� ������; ��� �� ��������� ������� ������, �� ������������ ����������� � ������������� ��� ��������� ��������� ������������ ������ � ����������� �������� ����������� ���ң�. ���� ������ ����� ������ ���������� ��ߣ��, ��� ���������� ��������� ����������������, �� ����� ���������� �� ����������� ����� Maxime Henrion, ����� ��������, ������� �� �������� ���ң�.
����� ���� ���� �������� � ����������� �� ��������� ������. ��� ����������� ����� ��� �������� ���� ��������� ��� ��������� �� ���������. ��� �����, ����������� � �������� ����������, ��� ���������� ���� ���������� ���������� ���������� �� ������. ��� �������������� ����� ��� �������� ����, ����� ��� ������ ���� ��������� �����������. ��� ����� ����� ��� ���� �������� ���� ���������� ������ � ������.
������ ������������� �� ���������, � ����� �� ����.
�������������� ������� � ������
����� ������� ���������� �������, ��������� � ���� ��������, ����� ����� �����:
- ���������� ���������� ������� - pae(4)
- ��������� ����������� DMA, ����������� �� ����������� � ���� - bus_dma(9)
- �������-��������� ����� ������� ����������� ������ (VM) - pmap(9)
- ������� ���������� ��������� - rman(9)
��������� �� ��������� ��������
������ | ������������� | ��������� ���������� | ��������� | ���������� |
---|---|---|---|---|
alpha | Andrew Gallatin | 10 ������� 2002 | ��������� | � �������� � ������� ��ߣ��� ����������� ������ ����� ���� ��������. |
amd64 | Peter Wemm | 1 ���� 2003 | ��������� | �������������� ���������. |
ia64 | Marcel Moolenaar | 10 ������� 2002 | ��������� | � �������� � ������� ��ߣ��� ����������� ������ ����� ���� ��������. |
i386 | Sam Leffler | 9 ������� 2002 | ��������� | �������������� ���������. |
powerpc | Hiten Pandya | 15 ������ 2003 | ��������� | �������������� ���������. |
sparc64 | Thomas M"ostl | 6 ������ 2003 | ��������� | �������������� ���������. |
��������� �� ��������� ������� �����������
������� | ������������� | ��������� ���������� | busdma | INTR_MPSAFE | ��������� SMPng | a!=p | ��������� 4.x | ��������� | |
---|---|---|---|---|---|---|---|---|---|
if_ar | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | kvtop() | |
if_bge | Bill Paul | 13 ������ 2004 | ��������� | ��������� | ��������� | ��������� | �� ������� | � | |
if_cp | Roman Kurakin | 24 ���� 2004 | ��������� | ����������� | ����������� | �� ������� | �� ��������� | � | |
if_cs | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | � | |
if_ct | Roman Kurakin | 24 ���� 2004 | ��������� | ����������� | ����������� | �� ������� | �� ������� | � | |
if_cx | Roman Kurakin | 24 ���� 2004 | ��������� | ����������� | ����������� | �� ������� | �� ������� | � | |
if_dc | Maxime Henrion | 13 ������ 2004 | ��������� | ��������� | ��������� | ������� ������������ | �� ������� | ��� �������� ������������� MTX_RECURSE � ������ MPSAFE | |
if_de | Maxime Henrion | 13 ������ 2004 | ��������� | �� ������� | �� ������� | �� ������� | ��������� | � | |
if_ed | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | kvtop() | |
if_em | Prafulla S. Deuskar | 13 ������ 2004 | ��������� | ��������� | ��������� | ��������� | �� ������� | � | |
if_en | Hartmut Brandt | 13 ������ 2004 | ��������� | �� ������� | �� ������� | ������� ������������ | �� ������� | ���������� �����������; �ݣ �� �������� ��� INTR_MPSAFE? | |
if_ep | Warner Losh | 13 ������ 2004 | �� ��������� | ��������� | ��������� | ��������� | �� ��������� | ������� ������� ��� MTX_RECURSE. | |
if_ex | Warner Losh | 13 ������ 2004 | �� ��������� | �� ������� | �� ������� | �� ������� | �� ��������� | ��������� �� �����������. | |
if_fatm | Hartmut Brandt | 20 ���� 2004 | ��������� | ������� ������������ | ������� ������������ | ������� ������������ | �� ��������� | � | |
if_fxp | Maxime Henrion | 13 ������ 2004 | ��������� | ��������� | ��������� | ��������� | �� ������� | � | |
if_fwe | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | � | |
if_gem | Thomas M"ostl | 6 ������ 2003 | ��������� | �� ������� | �� ������� | �� ������� | �� ��������� | � | |
if_hatm | Hartmut Brandt | 20 ���� 2004 | ��������� | ������� ������������ | ������� ������������ | ������� ������������ | �� ��������� | � | |
if_hme | Thomas M"ostl | 30 ������ 2005 | ��������� | ��������� | ��������� | ��������� | �� ��������� | � | |
if_idt | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() | |
if_lge | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() | |
if_lnc | David O'Brien | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys(). ����������, ��� ��������� ����������/������������ ���������� � Poul-Henning Kamp. | |
if_mn | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys(). ����������, ��� ��������� ����������/������������ ���������� � Poul-Henning Kamp. | |
if_my | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() | |
if_nge | � | 16 �������� 2004 | �� ������� | �� ������� | ��������� | �� ������� | �� ������� | �� ������� | vtophys() |
if_pcn | David O'Brien | 13 ������ 2004 | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys(); ���������� �����������; �� �������� ��� INTR_MPSAFE? Mutex ������� ��� MTX_RECURSE. | |
if_pdq | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� ����� ������������ busdma, ����� vtophys() | |
if_re | � | � | ��������� | ��������� | ��������� | ��������� | �� ��������� | � | |
if_rl | Bill Paul | 13 ������ 2004 | ��������� | ��������� | ��������� | �� ������� | �� ������� | � | |
if_sf | � | 13 ������ 2004 | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys(); ���������� �����������; �� �������� ��� INTR_MPSAFE? Mutex ������� ��� MTX_RECURSE. | |
if_sis | Bill Paul | 13 ������ 2004 | ��������� | ��������� | ��������� | �� ������� | �� ������� | ������� ������� ��� MTX_RECURSE. | |
if_sk | � | � | �� ������� | ��������� | ��������� | �� ������� | �� ������� | vtophys() | |
if_sr | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() | |
if_ste | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() | |
if_ti | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | � | |
if_tl | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | � | |
if_tx | Maxime Henrion | 19 ������ 2003 | ��������� | �� ������� | �� ������� | ������� ������������ | �� ������� | vtophys() | |
if_txp | Will Andrews | 18 ���� 2003 | ����������� | �� ������� | �� ������� | �� ������� | �� ������� | � | |
if_vr | � | 23 ������ 2004 | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | � | |
if_wb | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | � | |
if_wi | Sam Leffler, Warner Losh | 4 ������ 2003 | ���������� | ��������� | ���������� | ���������� | ���������� | � | |
if_xl | Maxime Henrion | 13 ������ 2004 | ��������� | ��������� | ��������� | ��������� | �� ������� | � |
��������� �� ��������� ��������� ��������
������� | ������������� | ��������� ���������� | busdma | INTR_MPSAFE | ��������� SMPng | a!=p | ��������� 4.x | ���������� |
---|---|---|---|---|---|---|---|---|
aac | Scott Long | 31 ������ 2005 | ��������� | ��������� | ��������� | ��������� | ��������� | �� ��������� ������������ ������� ���������� ������ endian |
adv | � | 9 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
aha | � | 13 ������ 2004 | ��������� | ����������� | ����������� | �� ������� | �� ������� | ���������� BUSDMA, �� ����� ������ ����� ���� � ������� ����� |
ahb | � | 9 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
ahc | Justin T. Gibbs | 31 ������ 2005 | ��������� | �� ������� | �� ������� | ��������� | ��������� | � |
ahd | Justin T. Gibbs | 31 ������ 2005 | ��������� | �� ������� | �� ������� | ��������� | ��������� | � |
amd | � | 14 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
amr | Scott Long | 30 ������ 2005 | ��������� | ��������� | ��������� | ��������� | �� ������� | � |
asr | � | 4 ������ 2003 | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys(). ������� ������� ���������. ���������� ����� ���������� I2O. |
ata | Soren Schmidt | 9 ������� 2002 | ��������� | ��������� | ��������� | ��������� | �� ������� | � |
buslogic | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() |
ciss | � | 9 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
ct | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
dpt | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() |
ida | � | 9 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
iir | � | 30 ������ 2005 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | ������� ������� ������ ��� ������������� � API busdma. |
isp | � | 8 ������� 2003 | ��������� | ��������� | �� ������� | �� ������� | �� ������� | � |
ips | Scott Long | 30 ������ 2005 | ��������� | ��������� | ��������� | ��������� | ��������� | � |
mlx | Scott Long | 8 ������� 2003 | ��������� | ����������� | ����������� | �� ������� | �� ������� | � |
mly | Scott Long | 8 ������� 2003 | ��������� | ����������� | ����������� | �� ������� | �� ������� | � |
mpt | � | 9 ������� 2002 | ��������� | ��������� | �� ������� | �� ������� | �� ������� | � |
ncr | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys(). ����������, ���������� � Poul-Henning Kamp ��� ��������� ����������� �������� ������������. |
pst | � | � | �� ������� | ��������� | �� ������� | �� ������� | �� ������� | vtophys() |
stg | � | 9 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� ���� �������� ��� ������ ����������. |
sym | � | 19 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
trm | Olivier Houchard | 9 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
twe | � | 9 ������� 2002 | ��������� | �� ������� | �� ������� | �� ������� | �� ������� | � |
wds | � | 2 ������� 2005 | ��������� | �� ������� | �� ������� | �� ������� | ��������� | � |
��������� �� ��������� ������ ���������
������� | ������������� | ��������� ���������� | busdma | INTR_MPSAFE | ��������� SMPng | a!=p | ��������� 4.x | ���������� |
---|---|---|---|---|---|---|---|---|
agp | Olivier Houchard | 23 ������ 2003 | ����������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() |
bktr | Olivier Houchard | 15 ������ 2003 | ����������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() |
digi | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() |
drm | Eric Anholt | 27 ������� 2003 | ����������� | ��������� | ��������� | ����������� | ����������� | vtophys(). ���������� ����� ������� ������������. |
fb | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() |
firewire | Hidetoshi Shimokawa | 17 ������ 2003 | ��������� | �� ������� | �� ������� | ��������� | �� ������� | vtophys() |
hfa | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys() |
hifn | Sam Leffler | 13 ������ 2004 | ��������� | ��������� | ��������� | �� ������� | �� ������� | � |
musycc | � | � | �� ������� | �� ������� | �� ������� | �� ������� | �� ������� | vtophys(). ����������, �� �����������/������������� ���������� � Poul-Henning Kamp. |
pcm | Olivier Houchard | 20 ������� 2003 | ��������� | ��������� | �� ������� | �� ������� | �� ������� | � |
ubsec | Sam Leffler | 13 ������ 2004 | ��������� | ��������� | ��������� | �� ������� | �� ������� | vtophys() ���������� ��� ������� printf |
usb | John-Mark Gurney | 24 ���� 2003 | ��������� | �� ������� | �� ������� | ������� ������������ | �� ������� | a!=p ������ ��������, ������ ��������� �������������� ������������ |
��������� �� ����������������
������ | ������������� | ��������� ���������� | ��������� | ���������� |
---|---|---|---|---|
���������� �������� �� busdma API | Hiten Pandya | 15 ������ 2003 | ��������� | � |