From: ming.lei@canonical.com (Ming Lei)
To: linux-arm-kernel@lists.infradead.org
Subject: userspace firmware load fails with current linux-next
Date: Wed, 23 Oct 2013 18:26:09 +0800 [thread overview]
Message-ID: <20131023182609.6646b5c0@tom-ThinkPad-T410> (raw)
In-Reply-To: <20131023110618.7bd07899@ipc1.ka-ro>
Hi,
On Wed, 23 Oct 2013 11:06:18 +0200
Lothar Wa?mann <LW@KARO-electronics.de> wrote:
> Hi,
>
> with the current linux-next loading firmware from userspace fails
> because when writing to /sys/class/firmware/*/data the return code is
> always 0 (meaning to the userspace too that no data was written).
> Thus the userspace tool (mdev) keeps writing the same block of data
> over and over again.
>
> A cursory check of the latest updates to /drivers/base/firmware* didn't
> reveal anything that could be the cause of this misbehaviour.
>
> Interestingly when changing the .size member of the
> struct bin_attribute firmware_attr_data in drivers/base/firmware_class.c
> (which is now '0') to e.g. PAGE_SIZE firmware loading works again.
Thank you for the report and analysis.
>
> Since .size was at '0' since the beginning of the .git universe there
> must have been a fundamental change in the guts of the kernel handling
> sysfs attribute files.
It may be introduced by Tejun's recent change.
>
> Is this behavioural change intended?
I think no.
> Do all sysfs attributes that are created with zero size need to be
> changed?
I think no, since drivers have no idea of size of their firmwares.
> Or is it an unintended side effect of some recent change?
Maybe yes, could you test below patch?
Tejun, looks we need to keep special attention on zero size of bin file
as before, could you comment at the patch?
--
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index 5d818df..366ae8d 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -277,7 +277,7 @@ static ssize_t sysfs_write_file(struct file *file, const char __user *user_buf,
ssize_t len = min_t(size_t, count, PAGE_SIZE);
char *buf;
- if (sysfs_is_bin(of->sd)) {
+ if (sysfs_is_bin(of->sd) && size) {
loff_t size = file_inode(file)->i_size;
if (size <= *ppos)
Thanks,
--
Ming Lei
next prev parent reply other threads:[~2013-10-23 10:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-23 9:06 userspace firmware load fails with current linux-next Lothar Waßmann
2013-10-23 10:26 ` Ming Lei [this message]
2013-10-23 10:43 ` Lothar Waßmann
2013-10-23 10:48 ` Ming Lei
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=20131023182609.6646b5c0@tom-ThinkPad-T410 \
--to=ming.lei@canonical.com \
--cc=linux-arm-kernel@lists.infradead.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