������ ��������� ��������� 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 | ��������� | � |