libbinder: add a NO_CACHING flag to MemoryHeapBase

The NO_CACHING flag translates to opening a memory region with O_SYNC.

Signed-off-by: Iliyan Malchev <malchev@google.com>
This commit is contained in:
Iliyan Malchev 2009-10-29 22:55:00 -07:00
parent db95a9e824
commit 0db1a8931b
2 changed files with 7 additions and 2 deletions

View File

@ -35,7 +35,8 @@ public:
MAP_ONCE = IMemoryHeap::MAP_ONCE, MAP_ONCE = IMemoryHeap::MAP_ONCE,
// memory won't be mapped locally, but will be mapped in the remote // memory won't be mapped locally, but will be mapped in the remote
// process. // process.
DONT_MAP_LOCALLY = 0x00000100 DONT_MAP_LOCALLY = 0x00000100,
NO_CACHING = 0x00000200
}; };
/* /*

View File

@ -67,7 +67,11 @@ MemoryHeapBase::MemoryHeapBase(const char* device, size_t size, uint32_t flags)
: mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags), : mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags),
mDevice(0), mNeedUnmap(false) mDevice(0), mNeedUnmap(false)
{ {
int fd = open(device, O_RDWR); int open_flags = O_RDWR;
if (flags & NO_CACHING)
open_flags |= O_SYNC;
int fd = open(device, open_flags);
LOGE_IF(fd<0, "error opening %s: %s", device, strerror(errno)); LOGE_IF(fd<0, "error opening %s: %s", device, strerror(errno));
if (fd >= 0) { if (fd >= 0) {
const size_t pagesize = getpagesize(); const size_t pagesize = getpagesize();