Ho scritto un driver linux che ioremaps esporta PCI BAR0 per un particolare dispositivo in un attributo binario sysfs permettendo allo userspace di controllarlo direttamente.Come impedire a MMAP di memorizzare i valori nella cache?
Il problema si verifica quando provo a MMAP sopra l'attributo per accedere direttamente a quel bit di memoria (da un programma userland). Le letture hanno esito positivo e restituiscono i valori previsti, anche se quando scrivo in quella memoria sembra essere memorizzato nella cache da qualche parte tra il kernel e la memoria e non viene consegnato al complesso root GMCH (e quindi al dispositivo). Quello che mi piacerebbe fare è avere una barriera implicita della memoria di scrittura dopo ogni accesso.
- C'è un modo per evitare che il kernel da caching scrive per un po 'mmap-ed di memoria?
follow up:
- chiama msync() dopo ogni accesso al "accettato" modo di fare questo?
Per rispondere al follow-up ... non è necessario 'msync() 'qui perché non c'è alcun file che supporta il mmap. Ciò di cui potresti aver bisogno sono alcune istruzioni specifiche per l'architettura per varie cose ... per esempio per garantire l'ordine corretto degli accessi hardware su powerpc potresti aver bisogno di [eieio] (https://www-01.ibm.com/support/knowledgecenter /ssw_aix_61/com.ibm.aix.alangref/idalangref_eieio_instrs.htm) istruzione (qualcuno ha il senso dell'umorismo :-) ... stesso commento fatto [qui] (https://unix.stackexchange.com/questions/237783/ Accedendo-memory-mappato-io-è-lenta). –