lkml.org 
[lkml]   [2018]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V3 18/39] x86/intel_rdt: Add utility to test if tasks assigned to resource group
    Date
    In considering changes to a resource group it becomes necessary to know
    whether tasks have been assigned to the resource group in question.

    Introduce a new utility that can be used to check if any tasks have been
    assigned to a particular resource group.

    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    ---
    arch/x86/kernel/cpu/intel_rdt.h | 1 +
    arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 26 ++++++++++++++++++++++++++
    2 files changed, 27 insertions(+)

    diff --git a/arch/x86/kernel/cpu/intel_rdt.h b/arch/x86/kernel/cpu/intel_rdt.h
    index fa2aa7e8ad73..e33b1215f394 100644
    --- a/arch/x86/kernel/cpu/intel_rdt.h
    +++ b/arch/x86/kernel/cpu/intel_rdt.h
    @@ -465,6 +465,7 @@ int rdtgroup_cbm_overlaps(struct rdt_resource *r, struct rdt_domain *d,
    unsigned int rdtgroup_cbm_to_size(struct rdt_resource *r, struct rdt_domain *d,
    u32 cbm);
    enum rdtgrp_mode rdtgroup_mode_by_closid(int closid);
    +int rdtgroup_tasks_assigned(struct rdtgroup *r);
    struct rdt_domain *get_domain_from_cpu(int cpu, struct rdt_resource *r);
    int update_domains(struct rdt_resource *r, int closid);
    void closid_free(int closid);
    diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
    index 541103a2dea0..f2da6a2827c8 100644
    --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
    +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
    @@ -564,6 +564,32 @@ static int __rdtgroup_move_task(struct task_struct *tsk,
    return ret;
    }

    +/**
    + * rdtgroup_tasks_assigned - Test if tasks have been assigned to resource group
    + * @r: Resource group
    + *
    + * Return: 1 if tasks have been assigned to @r, 0 otherwise
    + */
    +int rdtgroup_tasks_assigned(struct rdtgroup *r)
    +{
    + struct task_struct *p, *t;
    + int ret = 0;
    +
    + lockdep_assert_held(&rdtgroup_mutex);
    +
    + rcu_read_lock();
    + for_each_process_thread(p, t) {
    + if ((r->type == RDTCTRL_GROUP && t->closid == r->closid) ||
    + (r->type == RDTMON_GROUP && t->rmid == r->mon.rmid)) {
    + ret = 1;
    + break;
    + }
    + }
    + rcu_read_unlock();
    +
    + return ret;
    +}
    +
    static int rdtgroup_task_write_permission(struct task_struct *task,
    struct kernfs_open_file *of)
    {
    --
    2.13.6
    \
     
     \ /
      Last update: 2018-04-25 20:17    [W:4.059 / U:0.880 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site