Abwärtskompatibilität

Das Speicherverwaltungs-Subsystem in Linux hat sich seit der Version 2.0 drastisch verändert. Glücklicherweise sind die Änderungen an der Programmierschnittstelle aber deutlich kleiner und leichter zu berücksichtigen.

kmalloc und kfree haben sich zwischen Linux 2.0 und Linux 2.4 kaum verändert. Der Zugriff auf den hohen Speicher und damit das Flag _ _GFP_HIGHMEM wurde im Kernel 2.3.23 hinzugefügt; sysdep.h füllt die Lücken und ermöglicht die 2.4-Semantik auch in 2.2 und 2.0.

Die Lookaside-Cache-Funktionen wurden in Linux 2.1.23 eingeführt und standen im 2.0-Kernel einfach nicht zur Verfügung. Code, der portabel mit 2.0-Kerneln sein muß, sollte sich einfach auf kmalloc und kfree beschränken. Außerdem wurde kmem_destroy_cache während der 2.3-Entwicklung eingeführt und ist erst in der Version 2.2.18 in die 2.2-Serie zurückportiert worden. Aus diesem Grund kann scullc nicht mit einem älteren 2.2-Kernel kompiliert werden.

_ _get_free_pages hatte in Linux 2.0 ein drittes Integer-Argument namens dma, das die gleiche Funktion wie das Flag __GFP_DMA in modernen Kerneln erfüllte, aber nicht mit dem flags-Argument zusammengefaßt war. Um dieses Problem zu umgehen, übergibt sysdep.h 0 als dritten Parameter an die 2.0-Funktion. Wenn Sie DMA-Seiten anfordern wollen und abwärtskompatibel mit 2.0 sein müssen, dann müssen Sie get_dma_pages aufrufen, anstatt __GFP_DMA zu verwenden.

vmalloc und vfree sind in allen 2.x-Kerneln unverändert geblieben. Die Funktion ioremap hieß aber zu 2.0-Zeiten vremap, und es gab noch kein iounmap. Statt dessen wurden mit vremap angeforderte I/O-Abbildungen mit vfree wieder freigegeben. Außerdem gab es die Header-Datei linux/vmalloc.h in 2.0 noch nicht; die Funktionen waren statt dessen in linux/mm.h deklariert. Wie üblich sorgt sysdep.h dafür, daß 2.4-Code auch mit früheren Kerneln funktioniert; außerdem wird linux/vmalloc.h eingebunden, wenn linux/mm.h ebenfalls eingebunden wird, so daß auch dieser Unterschied nicht sichtbar ist.