2016-07-01 17 views
2

Ich versuche, einige Funktionen aus dem neuesten stabilen Kernel (4.6.3) zu älteren portieren, aus welchem ​​Grund auch immer ich dafür habe. Alles ging ziemlich gut, aber ich bekomme immer wieder mm/filemap.c:1183:4: error: implicit declaration of function '__SetPageReferenced'Wo ist die Definition von __SetPageReferenced in Kernel-Quellen

ich nicht oryginal Definition von static inline void __SetPageReferenced(struct page *page), die lustig finden, wenn man bedenkt, dass oryginal 4.6.3 kein Problem trotz Tatsache kompiliert ich nicht, dass die Definition in seinen Quellen

vergessen finden um zu erwähnen, gibt es ähnliche Deklarationen in include/linux/page-flags.h Ich würde es einfach kopieren und einfügen hier, wenn ich wüsste, wo es zu finden ist. Leider konnte ich nirgendwo online eine nützliche Erwähnung finden.

Also dank der Konversation im Kommentarbereich, vor allem @LPs Eingang kam ich mit einer Art von einem Hack, wo ich definiere: #define __SetPageReferenced(page) set_bit(PG_referenced, &(page)->flags), die das implizite Deklaration Problem loswerden. Ich werde posten, ob es funktioniert oder nicht, wenn ich schließlich meine Funktionalität portiere und basierend auf den Ergebnissen die Frage möglicherweise erneut öffne oder schließe.

Prost!

Seitennotiz: herausgefunden, dass Sie stattdessen extern void mark_page_accessed(struct page *); verwenden können, während verschiedene Problem beheben.

+0

Haben Sie auch die Header-Dateien überprüft? Das 'static inline' gibt an, dass die Funktion möglicherweise in einer Headerdatei definiert ist. –

+0

Linux Cross Reference (LXR) ist eine großartige Ressource für das Graben in Fragen als solche: http://lxr.free-electronics.com – datenwolf

+0

@datenwolf Danke, aber ich würde hier nicht schreiben, wenn ich es nicht schon versucht und gescheitert. @JoachimPileborg gibt es anscheinend keinen Header für 'filemap.c' in' include/linux/'mehr in 4.6.3. Aber auch, ich werde Unterordner erneut mit rekursiver Suche überprüfen. Außerdem wurden alle Header überprüft, die in der Dateiübersicht enthalten sind. Greping rekursiv durch den ganzen Kernel bringt nichts nützliches zurück. – RoughTomato

Antwort

1

Makro Declare __SETPAGEFLAGhere, verwenden Sie es für referenced Bit here
Ergebnis:

static __always_inline void __SetPageReferenced(struct page *page)   \ 
{ __set_bit(PG_referenced, &PF_HEAD(page, 1)->flags); } 
+0

Dank Ihrer Post habe ich diese Makros herausgefunden. Danke vielmals! – RoughTomato