From: Federico Vaga <federico.vaga@cern.ch>
To: Alan Tull <atull@kernel.org>, Moritz Fischer <mdf@kernel.org>,
linux-fpga@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: fpga: fpga_mgr_get() buggy ?
Date: Thu, 21 Jun 2018 15:13:41 +0200 [thread overview]
Message-ID: <4617134.5euanDEBgJ@pcbe13614> (raw)
Hello,
I believe that this patch
fpga: manager: change api, don't use drvdata
7085e2a94f7df5f419e3cfb2fe809ce6564e9629
is incomplete and buggy.
I completely agree that drvdata should not be used by the FPGA manager
or any other subsystem like that.
What is buggy is the function fpga_mgr_get().
That patch has been done to allow multiple FPGA manager instances to
be linked to the same device (PCI it says). But function
fpga_mgr_get() will return only the first found: what about the
others?
Then, all load kernel-doc comments says:
"This code assumes the caller got the mgr pointer from
of_fpga_mgr_get() or fpga_mgr_get()"
but that function does not allow me to get, for instance, the second
FPGA manager on my card.
Since, thanks to this patch I'm actually the creator of the
fpga_manager structure, I do not need to use fpga_mgr_get() to
retrieve that data structure.
Despite this, I believe we still need to increment the module
reference counter (which is done by fpga_mgr_get()).
We can fix this function by just replacing the argument from 'device'
to 'fpga_manager' (the one returned by create() ). Alternatively, we
can add an 'owner' field in "struct fpga_manager_ops" and 'get' it
when we use it. Or again, just an 'owner' argument in the create()
function. I'm proposing these alternatives because I'm not sure that
this is correct:
if (!try_module_get(dev->parent->driver->owner))
What if the device does not have a driver? Do we consider the
following a valid use case?
probe(struct device *dev) {
struct device *mydev;
mydev->parent = dev;
device_register(mydev);
fpga_mrg_create(mydev, ....);
}
thanks :)
WARNING: multiple messages have this Message-ID (diff)
From: Federico Vaga <federico.vaga@cern.ch>
To: Alan Tull <atull@kernel.org>, Moritz Fischer <mdf@kernel.org>,
<linux-fpga@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: fpga: fpga_mgr_get() buggy ?
Date: Thu, 21 Jun 2018 15:13:41 +0200 [thread overview]
Message-ID: <4617134.5euanDEBgJ@pcbe13614> (raw)
Hello,
I believe that this patch
fpga: manager: change api, don't use drvdata
7085e2a94f7df5f419e3cfb2fe809ce6564e9629
is incomplete and buggy.
I completely agree that drvdata should not be used by the FPGA manager
or any other subsystem like that.
What is buggy is the function fpga_mgr_get().
That patch has been done to allow multiple FPGA manager instances to
be linked to the same device (PCI it says). But function
fpga_mgr_get() will return only the first found: what about the
others?
Then, all load kernel-doc comments says:
"This code assumes the caller got the mgr pointer from
of_fpga_mgr_get() or fpga_mgr_get()"
but that function does not allow me to get, for instance, the second
FPGA manager on my card.
Since, thanks to this patch I'm actually the creator of the
fpga_manager structure, I do not need to use fpga_mgr_get() to
retrieve that data structure.
Despite this, I believe we still need to increment the module
reference counter (which is done by fpga_mgr_get()).
We can fix this function by just replacing the argument from 'device'
to 'fpga_manager' (the one returned by create() ). Alternatively, we
can add an 'owner' field in "struct fpga_manager_ops" and 'get' it
when we use it. Or again, just an 'owner' argument in the create()
function. I'm proposing these alternatives because I'm not sure that
this is correct:
if (!try_module_get(dev->parent->driver->owner))
What if the device does not have a driver? Do we consider the
following a valid use case?
probe(struct device *dev) {
struct device *mydev;
mydev->parent = dev;
device_register(mydev);
fpga_mrg_create(mydev, ....);
}
thanks :)
next reply other threads:[~2018-06-21 13:14 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-21 13:13 Federico Vaga [this message]
2018-06-21 13:13 ` fpga: fpga_mgr_get() buggy ? Federico Vaga
2018-06-22 2:07 ` Alan Tull
2018-06-22 7:53 ` Federico Vaga
2018-06-22 7:53 ` Federico Vaga
2018-06-26 21:00 ` Alan Tull
2018-06-27 9:25 ` Federico Vaga
2018-06-27 9:25 ` Federico Vaga
2018-06-27 21:23 ` Alan Tull
2018-06-28 7:50 ` Federico Vaga
2018-06-28 7:50 ` Federico Vaga
2018-07-18 19:47 ` Alan Tull
2018-07-18 21:47 ` Federico Vaga
2018-07-18 21:47 ` Federico Vaga
2018-08-15 21:02 ` Alan Tull
2018-08-16 7:18 ` Federico Vaga
2018-08-16 7:18 ` Federico Vaga
2018-08-16 18:20 ` Alan Tull
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=4617134.5euanDEBgJ@pcbe13614 \
--to=federico.vaga@cern.ch \
--cc=atull@kernel.org \
--cc=linux-fpga@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mdf@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.