Replace DCFlushRange with OSMemoryBarrier

This commit is contained in:
Maschell 2022-02-13 17:33:46 +01:00
parent 142aa827d2
commit 83c1cef208
4 changed files with 18 additions and 21 deletions

View File

@ -168,7 +168,7 @@ DECL_FUNCTION(FSStatus, FSChangeDirAsync, FSClient *client, FSCmdBlock *block, c
gReplacementInfo.contentReplacementInfo.workingDir[len - 1] = '/'; gReplacementInfo.contentReplacementInfo.workingDir[len - 1] = '/';
gReplacementInfo.contentReplacementInfo.workingDir[len] = 0; gReplacementInfo.contentReplacementInfo.workingDir[len] = 0;
} }
DCFlushRange(gReplacementInfo.contentReplacementInfo.workingDir, sizeof(gReplacementInfo.contentReplacementInfo.workingDir)); OSMemoryBarrier();
return real_FSChangeDirAsync(client, block, path, errorMask, asyncData); return real_FSChangeDirAsync(client, block, path, errorMask, asyncData);
} }

View File

@ -63,8 +63,7 @@ int getNewFileHandleIndex() {
OSFatal("Failed to alloc memory for mutex"); OSFatal("Failed to alloc memory for mutex");
} }
OSInitMutex(file_handles[i].mutex); OSInitMutex(file_handles[i].mutex);
DCFlushRange(file_handles[i].mutex, sizeof(OSMutex)); OSMemoryBarrier();
DCFlushRange(&file_handles[i], sizeof(fileMagic_t));
} }
break; break;
} }
@ -93,8 +92,7 @@ int32_t getNewDirHandleIndex() {
if (!dir_handles[i].mutex) { if (!dir_handles[i].mutex) {
OSFatal("Failed to alloc memory for mutex"); OSFatal("Failed to alloc memory for mutex");
} }
DCFlushRange(dir_handles[i].mutex, sizeof(OSMutex)); OSMemoryBarrier();
DCFlushRange(&dir_handles[i], sizeof(dirMagic_t));
} }
break; break;
} }
@ -114,7 +112,7 @@ void freeFileHandle(uint32_t handle) {
free(file_handles[handle].mutex); free(file_handles[handle].mutex);
file_handles[handle].mutex = nullptr; file_handles[handle].mutex = nullptr;
} }
DCFlushRange(&file_handles[handle], sizeof(fileMagic_t)); OSMemoryBarrier();
file_handle_mutex.unlock(); file_handle_mutex.unlock();
} }
@ -130,7 +128,7 @@ void freeDirHandle(uint32_t handle) {
dir_handles[handle].mutex = nullptr; dir_handles[handle].mutex = nullptr;
} }
dir_handles[handle] = {}; dir_handles[handle] = {};
DCFlushRange(&dir_handles[handle], sizeof(dirMagic_t)); OSMemoryBarrier();
dir_handle_mutex.unlock(); dir_handle_mutex.unlock();
} }
@ -198,7 +196,7 @@ FSStatus FSOpenDirWrapper(char *path,
} else { } else {
DEBUG_FUNCTION_LINE("Global FSClient or FSCmdBlock were null"); DEBUG_FUNCTION_LINE("Global FSClient or FSCmdBlock were null");
} }
DCFlushRange(dir_info, sizeof(dirMagic_t)); OSMemoryBarrier();
} }
OSUnlockMutex(dir_handles[handle_index].mutex); OSUnlockMutex(dir_handles[handle_index].mutex);
@ -252,7 +250,7 @@ FSStatus FSReadDirWrapper(FSDirectoryHandle handle,
dir_info->readResultCapacity = 1; dir_info->readResultCapacity = 1;
} }
} }
DCFlushRange(dir_info, sizeof(dirMagic_t)); OSMemoryBarrier();
} }
struct dirent *entry_ = readdir(dir); struct dirent *entry_ = readdir(dir);
@ -296,8 +294,7 @@ FSStatus FSReadDirWrapper(FSDirectoryHandle handle,
memcpy(&dir_info->readResult[dir_info->readResultNumberOfEntries], entry, sizeof(FSDirectoryEntry)); memcpy(&dir_info->readResult[dir_info->readResultNumberOfEntries], entry, sizeof(FSDirectoryEntry));
dir_info->readResultNumberOfEntries++; dir_info->readResultNumberOfEntries++;
DCFlushRange(dir_info->readResult, sizeof(FSDirectoryEntry) * dir_info->readResultNumberOfEntries); OSMemoryBarrier();
DCFlushRange(dir_info, sizeof(dirMagic_t));
} }
result = FS_STATUS_OK; result = FS_STATUS_OK;
@ -393,7 +390,7 @@ FSStatus FSCloseDirWrapper(FSDirectoryHandle handle,
dir_info->readResultCapacity = 0; dir_info->readResultCapacity = 0;
dir_info->readResultNumberOfEntries = 0; dir_info->readResultNumberOfEntries = 0;
} }
DCFlushRange(dir_info, sizeof(dirMagic_t)); OSMemoryBarrier();
} }
OSUnlockMutex(dir_handles[handle_index].mutex); OSUnlockMutex(dir_handles[handle_index].mutex);
@ -441,7 +438,7 @@ FSStatus FSRewindDirWrapper(FSDirectoryHandle handle,
DEBUG_FUNCTION_LINE("Global FSClient or FSCmdBlock were null"); DEBUG_FUNCTION_LINE("Global FSClient or FSCmdBlock were null");
} }
} }
DCFlushRange(dir_info, sizeof(dirMagic_t)); OSMemoryBarrier();
} }
OSUnlockMutex(dir_handles[handle_index].mutex); OSUnlockMutex(dir_handles[handle_index].mutex);
@ -544,7 +541,7 @@ FSStatus FSOpenFileWrapper(char *path,
*handle = file_handles[handle_index].handle; *handle = file_handles[handle_index].handle;
file_handles[handle_index].fd = fd; file_handles[handle_index].fd = fd;
file_handles[handle_index].in_use = true; file_handles[handle_index].in_use = true;
DCFlushRange(&file_handles[handle_index], sizeof(fileMagic_t)); OSMemoryBarrier();
} else { } else {
DEBUG_FUNCTION_LINE("File not found %s", pathForCheck); DEBUG_FUNCTION_LINE("File not found %s", pathForCheck);
if (gReplacementInfo.contentReplacementInfo.fallbackOnError) { if (gReplacementInfo.contentReplacementInfo.fallbackOnError) {

View File

@ -179,7 +179,7 @@ bool RL_LoadFromSDOnNextLaunch(const char *bundle_path) {
request.path[0] = '\0'; request.path[0] = '\0';
strncat(request.path, bundle_path, sizeof(request.path) - 1); strncat(request.path, bundle_path, sizeof(request.path) - 1);
DCFlushRange(&request, sizeof(request)); OSMemoryBarrier();
int success = false; int success = false;
int mcpFd = IOS_Open("/dev/mcp", (IOSOpenMode) 0); int mcpFd = IOS_Open("/dev/mcp", (IOSOpenMode) 0);
@ -193,7 +193,7 @@ bool RL_LoadFromSDOnNextLaunch(const char *bundle_path) {
IOS_Close(mcpFd); IOS_Close(mcpFd);
} }
DCFlushRange(&gReplacementInfo, sizeof(gReplacementInfo)); OSMemoryBarrier();
if (!success) { if (!success) {
gReplacementInfo.rpxReplacementInfo.willRPXBeReplaced = false; gReplacementInfo.rpxReplacementInfo.willRPXBeReplaced = false;
@ -229,7 +229,7 @@ bool RL_LoadFromSDOnNextLaunch(const char *bundle_path) {
} }
} }
DCFlushRange(&gReplacementInfo, sizeof(gReplacementInfo)); OSMemoryBarrier();
return true; return true;
} }
@ -251,7 +251,7 @@ bool RL_UnmountCurrentRunningBundle() {
DEBUG_FUNCTION_LINE("Unmount /vol/content"); DEBUG_FUNCTION_LINE("Unmount /vol/content");
romfsUnmount("rom"); romfsUnmount("rom");
gReplacementInfo.contentReplacementInfo.bundleMountInformation.isMounted = false; gReplacementInfo.contentReplacementInfo.bundleMountInformation.isMounted = false;
DCFlushRange(&gReplacementInfo, sizeof(gReplacementInfo)); OSMemoryBarrier();
return true; return true;
} }
} }

View File

@ -45,7 +45,7 @@ WUMS_APPLICATION_ENDS() {
DEBUG_FUNCTION_LINE("Unmount /vol/content"); DEBUG_FUNCTION_LINE("Unmount /vol/content");
romfsUnmount("rom"); romfsUnmount("rom");
gReplacementInfo.contentReplacementInfo.bundleMountInformation.isMounted = false; gReplacementInfo.contentReplacementInfo.bundleMountInformation.isMounted = false;
DCFlushRange(&gReplacementInfo, sizeof(gReplacementInfo)); OSMemoryBarrier();
} }
} }
gReplacementInfo.rpxReplacementInfo.isRPXReplaced = false; gReplacementInfo.rpxReplacementInfo.isRPXReplaced = false;
@ -94,7 +94,7 @@ WUMS_APPLICATION_STARTS() {
DEBUG_FUNCTION_LINE("Set mode to CONTENTREDIRECT_NONE and replaceSave to false"); DEBUG_FUNCTION_LINE("Set mode to CONTENTREDIRECT_NONE and replaceSave to false");
gReplacementInfo.contentReplacementInfo.mode = CONTENTREDIRECT_NONE; gReplacementInfo.contentReplacementInfo.mode = CONTENTREDIRECT_NONE;
gReplacementInfo.contentReplacementInfo.replaceSave = false; gReplacementInfo.contentReplacementInfo.replaceSave = false;
DCFlushRange(&gReplacementInfo, sizeof(gReplacementInfo)); OSMemoryBarrier();
} else { } else {
if (gReplacementInfo.contentReplacementInfo.mode == CONTENTREDIRECT_FROM_WUHB_BUNDLE) { if (gReplacementInfo.contentReplacementInfo.mode == CONTENTREDIRECT_FROM_WUHB_BUNDLE) {
uint32_t currentHash = StringTools::hash(gReplacementInfo.contentReplacementInfo.bundleMountInformation.toMountPath); uint32_t currentHash = StringTools::hash(gReplacementInfo.contentReplacementInfo.bundleMountInformation.toMountPath);
@ -137,6 +137,6 @@ WUMS_APPLICATION_STARTS() {
} }
} }
DCFlushRange(&gReplacementInfo, sizeof(gReplacementInfo)); OSMemoryBarrier();
} }
} }