lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <CANk1AXT-k4GAUKKC_vBMw4Lg9_LLQs+CGmQkkS7LTnkGc5TUAg@mail.gmail.com> Date: Fri, 17 Feb 2017 15:55:37 -0600 From: Alan Tull <delicious.quinoa@...il.com> To: "Li, Yi" <yi1.li@...ux.intel.com> Cc: Moritz Fischer <moritz.fischer@...us.com>, Jason Gunthorpe <jgunthorpe@...idianresearch.com>, linux-kernel <linux-kernel@...r.kernel.org>, linux-fpga@...r.kernel.org Subject: Re: [RFC 4/8] doc: fpga-mgr: separate getting/locking FPGA manager On Fri, Feb 17, 2017 at 11:14 AM, Li, Yi <yi1.li@...ux.intel.com> wrote: > hi Alan > > > On 2/15/2017 10:14 AM, Alan Tull wrote: >> >> Document that getting a reference to a FPGA Manager has been >> separated from locking the FPGA Mangager for use. >> >> fpga_mgr_lock/unlock functions get/release mutex. >> >> of_fpga_mgr_get, fpga_mgr_get, and fpga_mgr_put no longer lock >> the FPGA manager mutex. >> >> This makes it more straigtforward to save a reference to >> a FPGA manager and only attempting to lock it when programming >> the FPGA. > > > New to the FPGA world, but I like the idea of shorter lock. Separating the > lock from fpga_mgr_get will give underline FPGA device drivers more > flexibility to acquire the mgr pointer. > One newbie question, since the underline FPGA device driver does the > fpga_mgr_register during probe, each manager instance belongs to that FPGA > device only. What's the use to keep tracking the usage reference with > fpga_mgr_put/get function, or is it enough to increase/decrease dev > reference count in fpga_mgr_register/unregister function? Hi Yi, That's a good though but the code that creates the fpga mgr device might not be the code that needs to hold a reference to it. The device tree implementation is an example of this. The fpga mgr devices are created completely separately from the fpga regions. Alan > > Thanks, > Yi > >> >> Signed-off-by: Alan Tull <atull@...nel.org> >> --- >> Documentation/fpga/fpga-mgr.txt | 19 ++++++++++++++++++- >> 1 file changed, 18 insertions(+), 1 deletion(-) >> >> diff --git a/Documentation/fpga/fpga-mgr.txt >> b/Documentation/fpga/fpga-mgr.txt >> index 78f197f..06d5d5b 100644 >> --- a/Documentation/fpga/fpga-mgr.txt >> +++ b/Documentation/fpga/fpga-mgr.txt >> @@ -53,13 +53,26 @@ To get/put a reference to a FPGA manager: >> struct fpga_manager *of_fpga_mgr_get(struct device_node *node); >> struct fpga_manager *fpga_mgr_get(struct device *dev); >> -Given a DT node or device, get an exclusive reference to a FPGA >> manager. >> +Given a DT node or device, get an reference to a FPGA manager. Pointer >> +can be saved until you are ready to program the FPGA. >> void fpga_mgr_put(struct fpga_manager *mgr); >> Release the reference. >> +To get exclusive control of a FPGA manager: >> +------------------------------------------- >> + >> + int fpga_mgr_lock(struct fpga_magager *mgr); >> + >> +Call fpga_mgr_lock and verify that it returns 0 before attempting to >> +program the FPGA. >> + >> + void fpga_mgr_unlock(struct fpga_magager *mgr); >> + >> +Call fpga_mgr_unlock when done programming the FPGA. >> + >> To register or unregister the low level FPGA-specific driver: >> ------------------------------------------------------------- >> @@ -95,11 +108,13 @@ int ret; >> /* Get exclusive control of FPGA manager */ >> struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node); >> +ret = fpga_mgr_lock(mgr); >> /* Load the buffer to the FPGA */ >> ret = fpga_mgr_buf_load(mgr, &info, buf, count); >> /* Release the FPGA manager */ >> +fpga_mgr_unlock(mgr); >> fpga_mgr_put(mgr); >> @@ -124,11 +139,13 @@ int ret; >> /* Get exclusive control of FPGA manager */ >> struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node); >> +ret = fpga_mgr_lock(mgr); >> /* Get the firmware image (path) and load it to the FPGA */ >> ret = fpga_mgr_firmware_load(mgr, &info, path); >> /* Release the FPGA manager */ >> +fpga_mgr_unlock(mgr); >> fpga_mgr_put(mgr); >> > >
Powered by blists - more mailing lists