-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86/intel_rdt: Utilities to restrict/restore access to specific files
In support of Cache Pseudo-Locking we need to restrict access to specific resctrl files to protect the state of a resource group used for pseudo-locking from being changed in unsupported ways. Introduce two utilities that can be used to either restrict or restore the access to all files irrelevant to cache pseudo-locking when pseudo-locking in progress for the resource group. At this time introduce a new source file, intel_rdt_pseudo_lock.c, that will contain most of the code related to cache pseudo-locking. Temporarily mark these new functions as unused to silence compile warnings until they are used. Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: fenghua.yu@intel.com Cc: tony.luck@intel.com Cc: vikas.shivappa@linux.intel.com Cc: gavin.hindman@intel.com Cc: jithu.joseph@intel.com Cc: dave.hansen@intel.com Cc: hpa@zytor.com Link: https://lkml.kernel.org/r/ab6319d1244366be3f9b7f9fba1c3da4810a274b.1529706536.git.reinette.chatre@intel.com
- Loading branch information
Reinette Chatre
authored and
Thomas Gleixner
committed
Jun 23, 2018
1 parent
c966dac
commit 2a5d76a
Showing
2 changed files
with
115 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Resource Director Technology (RDT) | ||
* | ||
* Pseudo-locking support built on top of Cache Allocation Technology (CAT) | ||
* | ||
* Copyright (C) 2018 Intel Corporation | ||
* | ||
* Author: Reinette Chatre <reinette.chatre@intel.com> | ||
*/ | ||
|
||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
|
||
#include "intel_rdt.h" | ||
|
||
/** | ||
* rdtgroup_locksetup_user_restrict - Restrict user access to group | ||
* @rdtgrp: resource group needing access restricted | ||
* | ||
* A resource group used for cache pseudo-locking cannot have cpus or tasks | ||
* assigned to it. This is communicated to the user by restricting access | ||
* to all the files that can be used to make such changes. | ||
* | ||
* Permissions restored with rdtgroup_locksetup_user_restore() | ||
* | ||
* Return: 0 on success, <0 on failure. If a failure occurs during the | ||
* restriction of access an attempt will be made to restore permissions but | ||
* the state of the mode of these files will be uncertain when a failure | ||
* occurs. | ||
*/ | ||
static int __attribute__ ((unused)) | ||
rdtgroup_locksetup_user_restrict(struct rdtgroup *rdtgrp) | ||
{ | ||
int ret; | ||
|
||
ret = rdtgroup_kn_mode_restrict(rdtgrp, "tasks"); | ||
if (ret) | ||
return ret; | ||
|
||
ret = rdtgroup_kn_mode_restrict(rdtgrp, "cpus"); | ||
if (ret) | ||
goto err_tasks; | ||
|
||
ret = rdtgroup_kn_mode_restrict(rdtgrp, "cpus_list"); | ||
if (ret) | ||
goto err_cpus; | ||
|
||
if (rdt_mon_capable) { | ||
ret = rdtgroup_kn_mode_restrict(rdtgrp, "mon_groups"); | ||
if (ret) | ||
goto err_cpus_list; | ||
} | ||
|
||
ret = 0; | ||
goto out; | ||
|
||
err_cpus_list: | ||
rdtgroup_kn_mode_restore(rdtgrp, "cpus_list"); | ||
err_cpus: | ||
rdtgroup_kn_mode_restore(rdtgrp, "cpus"); | ||
err_tasks: | ||
rdtgroup_kn_mode_restore(rdtgrp, "tasks"); | ||
out: | ||
return ret; | ||
} | ||
|
||
/** | ||
* rdtgroup_locksetup_user_restore - Restore user access to group | ||
* @rdtgrp: resource group needing access restored | ||
* | ||
* Restore all file access previously removed using | ||
* rdtgroup_locksetup_user_restrict() | ||
* | ||
* Return: 0 on success, <0 on failure. If a failure occurs during the | ||
* restoration of access an attempt will be made to restrict permissions | ||
* again but the state of the mode of these files will be uncertain when | ||
* a failure occurs. | ||
*/ | ||
static int __attribute__ ((unused)) | ||
rdtgroup_locksetup_user_restore(struct rdtgroup *rdtgrp) | ||
{ | ||
int ret; | ||
|
||
ret = rdtgroup_kn_mode_restore(rdtgrp, "tasks"); | ||
if (ret) | ||
return ret; | ||
|
||
ret = rdtgroup_kn_mode_restore(rdtgrp, "cpus"); | ||
if (ret) | ||
goto err_tasks; | ||
|
||
ret = rdtgroup_kn_mode_restore(rdtgrp, "cpus_list"); | ||
if (ret) | ||
goto err_cpus; | ||
|
||
if (rdt_mon_capable) { | ||
ret = rdtgroup_kn_mode_restore(rdtgrp, "mon_groups"); | ||
if (ret) | ||
goto err_cpus_list; | ||
} | ||
|
||
ret = 0; | ||
goto out; | ||
|
||
err_cpus_list: | ||
rdtgroup_kn_mode_restrict(rdtgrp, "cpus_list"); | ||
err_cpus: | ||
rdtgroup_kn_mode_restrict(rdtgrp, "cpus"); | ||
err_tasks: | ||
rdtgroup_kn_mode_restrict(rdtgrp, "tasks"); | ||
out: | ||
return ret; | ||
} |