From: Weili Qian <qianweili@huawei.com>
To: Greg KH <gregkh@linuxfoundation.org>
Cc: <herbert@gondor.apana.org.au>, <wangzhou1@hisilicon.com>,
<linux-crypto@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<huangchenghai2@huawei.com>, <liulongfang@huawei.com>
Subject: Re: [PATCH 1/2] uacce: add device usage sysfs interface
Date: Tue, 22 Sep 2026 21:11:50 +0800 [thread overview]
Message-ID: <783736cc-c836-c283-8b6a-fa803a12d36d@huawei.com> (raw)
In-Reply-To: <2026092235-unfrosted-concept-4bd9@gregkh>
On 2026/9/22 20:13, Greg KH wrote:
> On Tue, Sep 22, 2026 at 07:57:14PM +0800, Weili Qian wrote:
>>
>> On 2026/9/22 17:21, Greg KH wrote:
>>> On Tue, Sep 22, 2026 at 05:11:55PM +0800, qianweili wrote:
>>>> On 2026/9/21 16:12, Greg KH wrote:
>>>>> On Mon, Sep 21, 2026 at 03:51:30PM +0800, Weili Qian wrote:
>>>>>> Userspace has no way to query the runtime usage of a UACCE
>>>>>> device; it can only be inferred indirectly from queue state, which is
>>>>>> neither accurate nor uniform across drivers.
>>>>>>
>>>>>> Add a read-only dev_usage sysfs attribute and a get_dev_usage callback
>>>>>> in struct uacce_ops. A driver implementing the callback writes the
>>>>>> current usage as a percentage (0-100) string into the caller-provided
>>>>>> buffer and returns the number of bytes written; dev_usage_show()
>>>>>> appends the trailing newline. The attribute is hidden via
>>>>>> uacce_dev_is_visible() when the driver does not provide the callback.
>>>>>>
>>>>>> The corresponding ABI entry is added to Documentation/ABI/testing/
>>>>>> sysfs-driver-uacce.
>>>>>>
>>>>>> Signed-off-by: Weili Qian <qianweili@huawei.com>
>>>>>> ---
>>>>>> Documentation/ABI/testing/sysfs-driver-uacce | 9 +++++++++
>>>>>> drivers/misc/uacce/uacce.c | 19 +++++++++++++++++++
>>>>>> include/linux/uacce.h | 5 +++++
>>>>>> 3 files changed, 33 insertions(+)
>>>>>>
>>>>>> diff --git a/Documentation/ABI/testing/sysfs-driver-uacce b/Documentation/ABI/testing/sysfs-driver-uacce
>>>>>> index d3f0b8f3c589..3e4af4c1e5a9 100644
>>>>>> --- a/Documentation/ABI/testing/sysfs-driver-uacce
>>>>>> +++ b/Documentation/ABI/testing/sysfs-driver-uacce
>>>>>> @@ -55,3 +55,12 @@ Date: Feb 2020
>>>>>> KernelVersion: 5.7
>>>>>> Contact: linux-accelerators@lists.ozlabs.org
>>>>>> Description: Size (bytes) of dus region queue file
>>>>>> +
>>>>>> +What: /sys/class/uacce/<dev_name>/dev_usage
>>>>>> +Date: Sep 2026
>>>>>> +KernelVersion: 7.3
>>>>> That's not going to happen here :(
>>>> I'll change it to 7.4 in the next version.
>>>>>> +Contact: linux-accelerators@lists.ozlabs.org
>>>>>> +Description: (R) Current usage of the device, reported as a driver-defined
>>>>>> + string of up to PAGE_SIZE - 1 bytes. Usage is expressed as a
>>>>>> + percentage (0-100). The attribute is hidden if the driver does
>>>>>> + not implement the get_dev_usage callback.
>>>>>> diff --git a/drivers/misc/uacce/uacce.c b/drivers/misc/uacce/uacce.c
>>>>>> index 45521d4a56d1..545ba35a590b 100644
>>>>>> --- a/drivers/misc/uacce/uacce.c
>>>>>> +++ b/drivers/misc/uacce/uacce.c
>>>>>> @@ -433,6 +433,20 @@ static ssize_t isolate_strategy_store(struct device *dev, struct device_attribut
>>>>>> return count;
>>>>>> }
>>>>>> +static ssize_t dev_usage_show(struct device *dev, struct device_attribute *attr, char *buf)
>>>>>> +{
>>>>>> + struct uacce_device *uacce = to_uacce_device(dev);
>>>>>> + int ret;
>>>>>> +
>>>>>> + ret = uacce->ops->get_dev_usage(uacce, buf, PAGE_SIZE - 1);
>>>>> Why can't you use sysfs_emit()? That way you don't have to worry about
>>>>> PAGE_SIZE, and you don't have to do:
>>>>>
>>>>>> + if (ret < 0)
>>>>>> + return ret;
>>>>>> +
>>>>>> + buf[ret++] = '\n';
>>>>> That type of thing :(
>>>>>
>>>>> Also, you got your math wrong above :(
>>>> sysfs_emit() is useful when the framework side knows the format string
>>>> upfront. Here get_dev_usage is a driver callback that dynamically
>>>> generates content -- the format is not known to the framework, so
>>>> there is no format string to emit. Having the callback write into a
>>>> temporary buffer and then sysfs_emit(buf, "%s", tmp) in the show
>>>> function would just add an unnecessary copy without gaining the
>>>> overflow protection that sysfs_emit normally provides.
>>> Then that is going to be a mess, sysfs files should be in a consistant
>>> way, don't have random formats for the same filename depending on random
>>> hardware types. Use different sysfs files if you want to do that.
>>>
>>> And this is just going to be a single value, nothing complex, so why do
>>> you need a callback for that?
>> A single device may run multiple independent algorithms in parallel
>> -- e.g. the HiSilicon ZIP device has separate compression and
>> decompression engines whose usage rates are independent and cannot
>> be aggregated into one meaningful number.
> Then that can not be a sysfs file, as sysfs files are "one value per
> file".
>
>> Following your suggestion of different sysfs files, one approach is
>> to expose one file per algorithm. Each file contains a single int
>> (0-100) formatted with sysfs_emit(), and the callback returns int.
>> But the number of algorithms is driver-specific (1 to 3 in the
>> HiSilicon drivers), so the framework would need to create attributes
>> dynamically at registration time, which adds complexity.
>>
>> I'm not sure this is the best approach. Do you have a better
>> suggestion for handling this case?
> I don't know, just don't violate the one-version-per-file rule AND
> always have the same type of data in the file with the same name (i.e.
> don't have a file that can contain different types of data.)
>
> This propose api seems to violate all of that, so I wouldn't recommend
> it at all.
>
> Why is this info needed in userspace at all? What is userspace going to
> do with it?
Userspace schedulers use this to decide whether to submit a task to
the hardware accelerator or fall back to CPU computation. When a
process initializes, it reads the device usage and compares it
against a threshold: if the accelerator is busy, the process uses
CPU computation for its lifetime; if it's idle, the process
submits tasks to the accelerator. This needs a stable,
programmatically readable interface.
The per-algorithm detail is necessary because a device may have
independent engines -- e.g. the HiSilicon ZIP device has separate
compression and decompression engines, and a process doing
compression should only check the compression usage, not the
decompression usage. Aggregating them into one value would cause
wrong scheduling decisions.
To follow the one-value-per-file rule, I propose exposing one sysfs
file per algorithm, with the algorithm name in the filename:
/sys/class/uacce/<dev>/dev_usage_compress
/sys/class/uacce/<dev>/dev_usage_decompress
Each file contains a single integer (0-100) formatted with
sysfs_emit(). The filenames are driver-defined based on the
algorithms the device supports, but every dev_usage_* file always
returns the same type -- a single usage percentage. Userspace
discovers the available files by listing the device directory.
Is this approach acceptable?
Thanks!
Weili
>
> thanks,
>
> greg k-h
>
> .
>
next prev parent reply other threads:[~2026-09-22 13:11 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-21 7:51 [PATCH 0/2] " Weili Qian
2026-09-21 7:51 ` [PATCH 1/2] " Weili Qian
2026-09-21 8:12 ` Greg KH
2026-09-22 9:11 ` qianweili
2026-09-22 9:21 ` Greg KH
2026-09-22 11:57 ` Weili Qian
2026-09-22 12:13 ` Greg KH
2026-09-22 13:11 ` Weili Qian [this message]
2026-09-21 7:51 ` [PATCH 2/2] crypto: hisilicon/qm - implement uacce get_dev_usage callback Weili Qian
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=783736cc-c836-c283-8b6a-fa803a12d36d@huawei.com \
--to=qianweili@huawei.com \
--cc=gregkh@linuxfoundation.org \
--cc=herbert@gondor.apana.org.au \
--cc=huangchenghai2@huawei.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liulongfang@huawei.com \
--cc=wangzhou1@hisilicon.com \
/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
all inboxes | Powered by JetHome®