kernel: Add resource limit related syscalls (#2773)
* kernel: Add resource limit related syscalls This commit implements all resource limit related syscalls. * Fix register mapping being wrong for SetResourceLimitLimitValue * Address gdkchan's comment
This commit is contained in:
parent
c94d47cc40
commit
dc837c0042
5 changed files with 206 additions and 2 deletions
|
@ -1918,6 +1918,95 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
return KernelResult.Success;
|
||||
}
|
||||
|
||||
public KernelResult GetResourceLimitLimitValue(int handle, LimitableResource resource, out long limitValue)
|
||||
{
|
||||
limitValue = 0;
|
||||
|
||||
if (resource >= LimitableResource.Count)
|
||||
{
|
||||
return KernelResult.InvalidEnumValue;
|
||||
}
|
||||
|
||||
KResourceLimit resourceLimit = KernelStatic.GetCurrentProcess().HandleTable.GetObject<KResourceLimit>(handle);
|
||||
|
||||
if (resourceLimit == null)
|
||||
{
|
||||
return KernelResult.InvalidHandle;
|
||||
}
|
||||
|
||||
limitValue = resourceLimit.GetLimitValue(resource);
|
||||
|
||||
return KernelResult.Success;
|
||||
}
|
||||
|
||||
public KernelResult GetResourceLimitCurrentValue(int handle, LimitableResource resource, out long limitValue)
|
||||
{
|
||||
limitValue = 0;
|
||||
|
||||
if (resource >= LimitableResource.Count)
|
||||
{
|
||||
return KernelResult.InvalidEnumValue;
|
||||
}
|
||||
|
||||
KResourceLimit resourceLimit = KernelStatic.GetCurrentProcess().HandleTable.GetObject<KResourceLimit>(handle);
|
||||
|
||||
if (resourceLimit == null)
|
||||
{
|
||||
return KernelResult.InvalidHandle;
|
||||
}
|
||||
|
||||
limitValue = resourceLimit.GetCurrentValue(resource);
|
||||
|
||||
return KernelResult.Success;
|
||||
}
|
||||
|
||||
public KernelResult GetResourceLimitPeakValue(int handle, LimitableResource resource, out long peak)
|
||||
{
|
||||
peak = 0;
|
||||
|
||||
if (resource >= LimitableResource.Count)
|
||||
{
|
||||
return KernelResult.InvalidEnumValue;
|
||||
}
|
||||
|
||||
KResourceLimit resourceLimit = KernelStatic.GetCurrentProcess().HandleTable.GetObject<KResourceLimit>(handle);
|
||||
|
||||
if (resourceLimit == null)
|
||||
{
|
||||
return KernelResult.InvalidHandle;
|
||||
}
|
||||
|
||||
peak = resourceLimit.GetPeakValue(resource);
|
||||
|
||||
return KernelResult.Success;
|
||||
}
|
||||
|
||||
public KernelResult CreateResourceLimit(out int handle)
|
||||
{
|
||||
KResourceLimit limit = new KResourceLimit(_context);
|
||||
|
||||
KProcess process = KernelStatic.GetCurrentProcess();
|
||||
|
||||
return process.HandleTable.GenerateHandle(limit, out handle);
|
||||
}
|
||||
|
||||
public KernelResult SetResourceLimitLimitValue(int handle, LimitableResource resource, long limitValue)
|
||||
{
|
||||
if (resource >= LimitableResource.Count)
|
||||
{
|
||||
return KernelResult.InvalidEnumValue;
|
||||
}
|
||||
|
||||
KResourceLimit resourceLimit = KernelStatic.GetCurrentProcess().HandleTable.GetObject<KResourceLimit>(handle);
|
||||
|
||||
if (resourceLimit == null)
|
||||
{
|
||||
return KernelResult.InvalidHandle;
|
||||
}
|
||||
|
||||
return resourceLimit.SetLimitValue(resource, limitValue);
|
||||
}
|
||||
|
||||
// Thread
|
||||
|
||||
public KernelResult CreateThread(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue