Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752065AbdI0GlQ (ORCPT ); Wed, 27 Sep 2017 02:41:16 -0400 Received: from mx.kolabnow.com ([95.128.36.41]:13084 "EHLO mx.kolabnow.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751088AbdI0GlO (ORCPT ); Wed, 27 Sep 2017 02:41:14 -0400 From: Federico Vaga To: Greg Kroah-Hartman Reply-To: federico.vaga@vaga.pv.it Cc: Tejun Heo , linux-kernel@vger.kernel.org Subject: Re: kernFS/sysfs: mmap and vm_operations close Date: Wed, 27 Sep 2017 08:41:12 +0200 Message-ID: <45653851.o6CCxcICBK@number-5> Organization: VAGA In-Reply-To: <20170926213129.GA3418@kroah.com> References: <1630389.Mmh9faUyQX@number-5> <20170926213129.GA3418@kroah.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3829 Lines: 99 On Tuesday, 26 September 2017 23:31:29 CEST Greg Kroah-Hartman wrote: > On Tue, Sep 26, 2017 at 05:50:55PM +0200, Federico Vaga wrote: > > Hello, > > > > I'm writing a sysfs binary attribute that makes use of the `mmap` > > operation. > Eeek, why? What are you using that for? I have a bus (VME) and we are not using the the VME subsystem provided by the kernel (why? Historical reasons, we had our own implementation before the kernel one appeared and we cannot port hundreds of drivers so easily in our environment). I want to make our VME interface "as PCI as possible", so I want to re-create resources that users can `mmap` to access the device memory. This abstraction will allow us to write utilities that works on PCI and VME devices without dealing with the peculiarity of each interface. This is particularly useful when you have FPGAs that can run the "same" code on different buses, but it is true as well when you have the same hardware (the same memory map) installed on VME cards or PCI cards. That's why a sysfs VME resource seems to me the easiest and clean way to achieve this. I do not want to create yet another layer that hides the differences between the two buses when mmap is so straight forward and easy to implement. Another point is that adding a new layer add complexity in the architecture and for the developers; they have to learn yet another non- standard interface that I invent, while the concept of resource is something that everybody know. > sysfs binary attributes are for dumping binary data that the kernel > doesn't touch/parse, through to hardware. Why use mmap for this? Do > you have a pointer to your code somewhere? No pointer :S But the code is not far from the Linux VME subsystem implementation since all the VME bus implementations comes from the same original code. They differs in interfaces with the users and the drivers. > > I would like to implement my own `open()` and `close()` `vm_ops` but > > apparently I'm not allowed to do it. > > Nope, you are not, not in sysfs :) > > > -------- kernfs/file.c - kernfs_fop_mmap () - modern kernel ----- > > -------- sysfs/bin.c - mmap () - old kernel ----- > > > > /* > > > > * It is not possible to successfully wrap close. > > * So error if someone is trying to use close. > > */ > > > > rc = -EINVAL; > > if (vma->vm_ops && vma->vm_ops->close) > > > > goto out_put; > > > > ---------------------------------------------------------- > > > > What is the reason behind this choice? > > Why "it is not possible to successfully wrap close" ? > > Because you shouldn't be doing that :) I know that this answer can take a lot of time ... but this is not an answer :D Anyway, don't waste time in answering, it is a personal curiosity because I do not see immediately why "it is not possible". > > > Is there an alternative/hack in order to be notified when the mmap is not > > used anymore and I can properly release my resources? > > Don't use mmap in sysfs :) > > > Due to HW resources limitation I "cannot" keep the device memory mapped > > when nobody is using it, that's why I would like to be able to use > > vm_ops->close(). In general, I would like to run my routine that release > > resources when the user does `munmap` or `close` > > Don't use mmap in sysfs :) ehehe I see. Is the sysfs binary attribute mmap a sort of a trap? :D Why do we have it if we should not use it? Of course we cannot remove it because we have very important users of it (PCI). But then why it is not stated that the use of mmap is not suggested? > What problem are you trying to solve here that mmap seemed like the > correct solution? Answered above Thank you -- Federico Vaga http://www.federicovaga.it