int CreatePerProcessProcEntry(const char *name, read_proc_t rhandler, write_proc_t whandler, void *data) { struct PVRSRV_ENV_PER_PROCESS_DATA *psPerProc; u32 ui32PID; if (!dir) { PVR_DPF(PVR_DBG_ERROR, "CreatePerProcessProcEntries: /proc/%s doesn't exist", PVRProcDirRoot); return -ENOMEM; } ui32PID = OSGetCurrentProcessIDKM(); psPerProc = PVRSRVPerProcessPrivateData(ui32PID); if (!psPerProc) { PVR_DPF(PVR_DBG_ERROR, "CreatePerProcessProcEntries: no per process data"); return -ENOMEM; } if (!psPerProc->psProcDir) { char dirname[16]; int ret; ret = snprintf(dirname, sizeof(dirname), "%u", ui32PID); if (ret <= 0 || ret >= sizeof(dirname)) { PVR_DPF(PVR_DBG_ERROR, "CreatePerProcessProcEntries: " "couldn't generate per process proc " "directory name \"%u\"", ui32PID); return -ENOMEM; } else { psPerProc->psProcDir = proc_mkdir(dirname, dir); if (!psPerProc->psProcDir) { PVR_DPF(PVR_DBG_ERROR, "CreatePerProcessProcEntries: " "couldn't create per process proc " "directory /proc/%s/%u", PVRProcDirRoot, ui32PID); return -ENOMEM; } } } return CreateProcEntryInDir(psPerProc->psProcDir, name, rhandler, whandler, data); }
IMG_HANDLE LinuxTerminatingProcessPrivateData(IMG_VOID) { if(!gui32ReleasePID) return NULL; return PVRSRVPerProcessPrivateData(gui32ReleasePID); }