linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Joseph, Jithu" <jithu.joseph@intel.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: "hdegoede@redhat.com" <hdegoede@redhat.com>,
	"markgross@kernel.org" <markgross@kernel.org>,
	"corbet@lwn.net" <corbet@lwn.net>,
	"Raj, Ashok" <ashok.raj@intel.com>,
	"Luck, Tony" <tony.luck@intel.com>,
	"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
	"patches@lists.linux.dev" <patches@lists.linux.dev>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"mingo@redhat.com" <mingo@redhat.com>,
	"rostedt@goodmis.org" <rostedt@goodmis.org>,
	"Shankar, Ravi V" <ravi.v.shankar@intel.com>,
	"tglx@linutronix.de" <tglx@linutronix.de>,
	"platform-driver-x86@vger.kernel.org" 
	<platform-driver-x86@vger.kernel.org>,
	"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
	"hpa@zytor.com" <hpa@zytor.com>, "bp@alien8.de" <bp@alien8.de>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"andriy.shevchenko@linux.intel.com" 
	<andriy.shevchenko@linux.intel.com>,
	"x86@kernel.org" <x86@kernel.org>
Subject: Re: [RFC 08/10] platform/x86/intel/ifs: Add IFS sysfs interface
Date: Mon, 7 Mar 2022 11:55:26 -0800	[thread overview]
Message-ID: <7c620f8a-189e-5ac4-30fe-1fa14ba799ea@intel.com> (raw)
In-Reply-To: <CAPcyv4g5bq9+u0iLjhpeJw8bkbCREUw60H2z_KfDz4hHCrKdFQ@mail.gmail.com>



On 3/7/2022 11:15 AM, Dan Williams wrote:
> On Mon, Mar 7, 2022 at 11:09 AM Joseph, Jithu <jithu.joseph@intel.com> wrote:
>>
>>
>>
>> On 3/7/2022 9:38 AM, Dan Williams wrote:
>>> On Fri, Mar 4, 2022 at 12:42 PM Joseph, Jithu <jithu.joseph@intel.com> wrote:
>>>>
>>>>
>>>>
>>
>>>>>> + */
>>>>>> +static ssize_t details_show(struct device *dev,
>>>>>> +                           struct device_attribute *attr,
>>>>>> +                           char *buf)
>>>>>> +{
>>>>>> +       unsigned int cpu = dev->id;
>>>>>> +       int ret;
>>>>>> +
>>>>>> +       if (down_trylock(&ifs_sem))
>>>>>> +               return -EBUSY;
>>>>>
>>>>> What is the ifs_sem protecting? This result is immediately invalid
>>>>> after the lock is dropped anyway, so why hold it over reading the
>>>>> value? You can't prevent 2 threads racing each other here.
>>>>
>>>> percpu thread running scan_test_worker() will update per_cpu(ifs_state, cpu).scan_details. (before signalling this thread to run, this lock would be acquired)
>>>> This is to protect against the scenario where if the percpu thread is running a test and if at the same time a user is querying its status, they would see busy.
>>>
>>> That begs the question why would userspace be polling this file? Is it
>>> because it does not know when a test completes otherwise? How does it
>>> know that the result it is seeing is from the test it ran and not some
>>> other invocation to start a new test?
>>
>> I think I should have explained the need for locking at a higher level .
>> It is to make sure that only one of the below action happens at any time
>>
>> 1. single percpu test
>> 2. all-cpu test (tests all cores sequentially)
>> 3. scan binary reload
>> 4. querying the status
>>
>> (There are h/w reasons for why we restrict to a  single IFS test at any time)
>> If 4 happens while 1 or 2 is in progress , we return busy.  My earlier explanation was trying to explain why we are preventing 4 when 1 or 2   is in progress.
>>
>> As to the question of why would a user do 4 while 1 or 2 is in progress, there is no reason for him to do that, both the run_test (percpu and global) are blocking.
>> But if he issues a test from one shell and uses another shell to query the status  (while it is still in progress) he will see busy.
> 
> ...and what about the race that the semaphore cannot solve of test run
> launch racing collection of previous run results?


pardon me if I am missing something obvious here … but everybody (the 4 scenarios listed above) tries to acquire the same semaphore, or returns -EBUSY if try_lock() fails.
So in case of triggering "run_test" and viewing "status" racing scenario you mention, the below are the 2 interleaving I see

if "echo 1 >  /sys/devices/sysem/cpu/cpu10/ifs/run_test" gets the lock , the parallel  "cat  /sys/devices/sysem/cpu/cpu10/ifs/status" will return busy (and not the previous status)
if  "cat  /sys/devices/sysem/cpu/cpu10/ifs/status", gets  the lock it will display the status of the last test result and  the parallel  "echo 1 >  /sys/devices/sysem/cpu/cpu10/ifs/run_test" will fail with busy

This I believe is consistent behavior.

  reply	other threads:[~2022-03-07 19:55 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-01 19:54 [RFC 00/10] Introduce In Field Scan driver Jithu Joseph
2022-03-01 19:54 ` [RFC 01/10] x86/microcode/intel: expose collect_cpu_info_early() for IFS Jithu Joseph
2022-03-01 20:08   ` Greg KH
2022-03-02  0:56     ` Joseph, Jithu
2022-03-02 10:30   ` Borislav Petkov
2022-03-03  1:34     ` Joseph, Jithu
2022-03-01 19:54 ` [RFC 02/10] Documentation: In-Field Scan Jithu Joseph
2022-03-01 20:07   ` Greg KH
2022-03-02  0:58     ` Joseph, Jithu
2022-03-01 19:54 ` [RFC 03/10] platform/x86/intel/ifs: Add driver for " Jithu Joseph
2022-03-02 23:24   ` Williams, Dan J
2022-03-02 23:31     ` Raj, Ashok
2022-03-03  0:02     ` Luck, Tony
2022-03-03  2:04     ` Joseph, Jithu
2022-03-01 19:54 ` [RFC 04/10] platform/x86/intel/ifs: Load IFS Image Jithu Joseph
2022-03-03  2:58   ` Williams, Dan J
2022-03-01 19:54 ` [RFC 05/10] platform/x86/intel/ifs: Check IFS Image sanity Jithu Joseph
2022-03-01 19:54 ` [RFC 06/10] platform/x86/intel/ifs: Authenticate and copy to secured memory Jithu Joseph
2022-03-01 19:54 ` [RFC 07/10] platform/x86/intel/ifs: Create kthreads for online cpus for scan test Jithu Joseph
2022-03-03  4:17   ` Williams, Dan J
2022-03-03 19:59     ` Luck, Tony
2022-03-04 19:20     ` Joseph, Jithu
2022-03-07 16:52       ` Dan Williams
2022-03-07 17:46         ` Luck, Tony
2022-03-10 21:42           ` Kok, Auke
2022-03-01 19:54 ` [RFC 08/10] platform/x86/intel/ifs: Add IFS sysfs interface Jithu Joseph
2022-03-04  0:31   ` Williams, Dan J
2022-03-04 16:51     ` Luck, Tony
2022-03-04 20:42     ` Joseph, Jithu
2022-03-04 21:01       ` Luck, Tony
2022-03-21 21:15         ` Luck, Tony
2022-03-07 17:38       ` Dan Williams
2022-03-07 19:09         ` Joseph, Jithu
2022-03-07 19:15           ` Dan Williams
2022-03-07 19:55             ` Joseph, Jithu [this message]
2022-03-07 20:25               ` Dan Williams
2022-03-07 20:56                 ` Joseph, Jithu
2022-03-07 21:28                   ` Dan Williams
2022-03-07 21:30                   ` gregkh
2022-03-07 21:33                     ` Luck, Tony
2022-03-01 19:54 ` [RFC 09/10] platform/x86/intel/ifs: add ABI documentation for IFS Jithu Joseph
2022-03-04  0:57   ` Williams, Dan J
2022-03-01 19:54 ` [RFC 10/10] trace: platform/x86/intel/ifs: Add trace point to track Intel IFS operations Jithu Joseph
2022-03-01 20:17   ` Steven Rostedt
2022-03-02  1:02     ` Joseph, Jithu
2022-03-01 20:10 ` [RFC 00/10] Introduce In Field Scan driver Greg KH
2022-03-01 20:14   ` Greg KH
2022-03-14 23:10     ` Luck, Tony
2022-03-15  7:34       ` Greg KH
2022-03-15 14:59         ` Luck, Tony
2022-03-15 15:26           ` Greg KH
2022-03-15 16:04             ` Dan Williams
2022-03-15 16:09               ` Dan Williams
2022-03-15 16:10             ` Luck, Tony
2022-03-16  8:09               ` Greg KH
2022-03-02 15:33   ` Steven Rostedt
2022-03-02 16:20     ` Greg KH
2022-03-02 13:59 ` Andy Lutomirski
2022-03-02 20:29   ` Luck, Tony
2022-03-02 21:18     ` Andy Lutomirski
2022-03-02 21:41       ` Luck, Tony
2022-03-02 23:11 ` Williams, Dan J

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=7c620f8a-189e-5ac4-30fe-1fa14ba799ea@intel.com \
    --to=jithu.joseph@intel.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=ashok.raj@intel.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdegoede@redhat.com \
    --cc=hpa@zytor.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=mingo@redhat.com \
    --cc=patches@lists.linux.dev \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=ravi.v.shankar@intel.com \
    --cc=rostedt@goodmis.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).