From: Valentin Schneider <valentin.schneider@arm.com>
To: Reinette Chatre <reinette.chatre@intel.com>
Cc: tglx@linutronix.de, fenghua.yu@intel.com, bp@alien8.de,
tony.luck@intel.com, kuo-lang.tseng@intel.com,
shakeelb@google.com, mingo@redhat.com, babu.moger@amd.com,
james.morse@arm.com, hpa@zytor.com, x86@kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH 2/3] x86/resctrl: Update PQR_ASSOC MSR synchronously when moving task to resource group
Date: Fri, 11 Dec 2020 20:46:17 +0000 [thread overview]
Message-ID: <jhjlfe4t6jq.mognet@arm.com> (raw)
In-Reply-To: <c8eebc438e057e4bc2ce00256664b7bb0561b323.1607036601.git.reinette.chatre@intel.com>
On 03/12/20 23:25, Reinette Chatre wrote:
> Fixes: e02737d5b826 ("x86/intel_rdt: Add tasks files")
> Reported-by: Shakeel Butt <shakeelb@google.com>
> Reported-by: Valentin Schneider <valentin.schneider@arm.com>
> Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
> Reviewed-by: Tony Luck <tony.luck@intel.com>
> Cc: stable@vger.kernel.org
Some pedantic comments below; with James' task_curr() + task_cpu()
suggestion:
Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
> ---
> static int __rdtgroup_move_task(struct task_struct *tsk,
> struct rdtgroup *rdtgrp)
> {
> - struct task_move_callback *callback;
> - int ret;
> -
> - callback = kzalloc(sizeof(*callback), GFP_KERNEL);
> - if (!callback)
> - return -ENOMEM;
> - callback->work.func = move_myself;
> - callback->rdtgrp = rdtgrp;
> -
> /*
> - * Take a refcount, so rdtgrp cannot be freed before the
> - * callback has been invoked.
> + * Set the task's closid/rmid before the PQR_ASSOC MSR can be
> + * updated by them.
> + *
> + * For ctrl_mon groups, move both closid and rmid.
> + * For monitor groups, can move the tasks only from
> + * their parent CTRL group.
> */
> - atomic_inc(&rdtgrp->waitcount);
> - ret = task_work_add(tsk, &callback->work, TWA_RESUME);
> - if (ret) {
> - /*
> - * Task is exiting. Drop the refcount and free the callback.
> - * No need to check the refcount as the group cannot be
> - * deleted before the write function unlocks rdtgroup_mutex.
> - */
> - atomic_dec(&rdtgrp->waitcount);
> - kfree(callback);
> - rdt_last_cmd_puts("Task exited\n");
> - } else {
> - /*
> - * For ctrl_mon groups move both closid and rmid.
> - * For monitor groups, can move the tasks only from
> - * their parent CTRL group.
> - */
> - if (rdtgrp->type == RDTCTRL_GROUP) {
> - tsk->closid = rdtgrp->closid;
> +
> + if (rdtgrp->type == RDTCTRL_GROUP) {
> + tsk->closid = rdtgrp->closid;
> + tsk->rmid = rdtgrp->mon.rmid;
> + } else if (rdtgrp->type == RDTMON_GROUP) {
> + if (rdtgrp->mon.parent->closid == tsk->closid) {
> tsk->rmid = rdtgrp->mon.rmid;
> - } else if (rdtgrp->type == RDTMON_GROUP) {
> - if (rdtgrp->mon.parent->closid == tsk->closid) {
> - tsk->rmid = rdtgrp->mon.rmid;
> - } else {
> - rdt_last_cmd_puts("Can't move task to different control group\n");
> - ret = -EINVAL;
> - }
> + } else {
> + rdt_last_cmd_puts("Can't move task to different control group\n");
> + return -EINVAL;
> }
> + } else {
> + rdt_last_cmd_puts("Invalid resource group type\n");
> + return -EINVAL;
> }
James already pointed out this should be a WARN_ON_ONCE(), but is that the
right place to assert rdtgrp->type validity?
I see only a single assignment to rdtgrp->type in mkdir_rdt_prepare();
could we fail the group creation there instead if the passed rtype is
invalid?
> - return ret;
> +
> + /*
> + * By now, the task's closid and rmid are set. If the task is current
> + * on a CPU, the PQR_ASSOC MSR needs to be updated to make the resource
> + * group go into effect. If the task is not current, the MSR will be
> + * updated when the task is scheduled in.
> + */
> + update_task_closid_rmid(tsk);
We need the above writes to be compile-ordered before the IPI is sent.
There *is* a preempt_disable() down in smp_call_function_single() that
gives us the required barrier(), can we deem that sufficient or would we
want one before update_task_closid_rmid() for the sake of clarity?
> +
> + return 0;
> }
>
> static bool is_closid_match(struct task_struct *t, struct rdtgroup *r)
next prev parent reply other threads:[~2020-12-11 21:40 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-03 23:25 [PATCH 0/3] x86/resctrl: Fix a few issues in moving a task to a resource group Reinette Chatre
2020-12-03 23:25 ` [PATCH 1/3] x86/resctrl: Move setting task's active CPU in a mask into helpers Reinette Chatre
2020-12-07 18:29 ` Borislav Petkov
2020-12-07 21:24 ` Reinette Chatre
2020-12-08 9:49 ` Borislav Petkov
2020-12-08 16:35 ` Reinette Chatre
2020-12-09 16:47 ` James Morse
2020-12-10 0:21 ` Reinette Chatre
2020-12-03 23:25 ` [PATCH 2/3] x86/resctrl: Update PQR_ASSOC MSR synchronously when moving task to resource group Reinette Chatre
2020-12-09 16:51 ` James Morse
2020-12-10 0:22 ` Reinette Chatre
2020-12-11 20:46 ` Valentin Schneider [this message]
2020-12-14 18:41 ` Reinette Chatre
2020-12-16 17:41 ` Valentin Schneider
2020-12-16 18:26 ` Reinette Chatre
2020-12-17 10:39 ` Valentin Schneider
2020-12-03 23:25 ` [PATCH 3/3] x86/resctrl: Don't move a task to the same " Reinette Chatre
2020-12-11 20:46 ` [PATCH 0/3] x86/resctrl: Fix a few issues in moving a task to a " Valentin Schneider
2020-12-14 18:38 ` Reinette Chatre
2020-12-16 17:41 ` Valentin Schneider
2020-12-16 18:26 ` Reinette Chatre
2020-12-17 12:19 ` [PATCH 4/3] x86/intel_rdt: Apply READ_ONCE/WRITE_ONCE to task_struct .rmid & .closid Valentin Schneider
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jhjlfe4t6jq.mognet@arm.com \
--to=valentin.schneider@arm.com \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=kuo-lang.tseng@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=reinette.chatre@intel.com \
--cc=shakeelb@google.com \
--cc=stable@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.