public inbox for llvm@lists.linux.dev
 help / color / mirror / Atom feed
From: "Arnd Bergmann" <arnd@arndb.de>
To: "Heiko Carstens" <hca@linux.ibm.com>,
	"Nathan Chancellor" <nathan@kernel.org>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
	gor@linux.ibm.com, "Alexander Gordeev" <agordeev@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"Sven Schnelle" <svens@linux.ibm.com>,
	wintera@linux.ibm.com, twinkler@linux.ibm.com,
	linux-s390@vger.kernel.org, Netdev <netdev@vger.kernel.org>,
	llvm@lists.linux.dev, patches@lists.linux.dev
Subject: Re: [PATCH 1/3] s390/vmlogrdr: Remove function pointer cast
Date: Thu, 18 Apr 2024 21:46:18 +0200	[thread overview]
Message-ID: <798df2d7-b13f-482a-8d4a-106c6492af01@app.fastmail.com> (raw)
In-Reply-To: <20240418151501.6056-C-hca@linux.ibm.com>

On Thu, Apr 18, 2024, at 17:15, Heiko Carstens wrote:
>> > > > -		/*
>> > > > -		 * The release function could be called after the
>> > > > -		 * module has been unloaded. It's _only_ task is to
>> > > > -		 * free the struct. Therefore, we specify kfree()
>> > > > -		 * directly here. (Probably a little bit obfuscating
>> > > > -		 * but legitime ...).
>> > > > -		 */
>> > > 
>> > > Why is the comment not relevant after this change? Or better: why is it not
>> > > valid before this change, which is why the code was introduced a very long
>> > > time ago? Any reference?
>> > > 
>> > > I've seen the warning since quite some time, but didn't change the code
>> > > before sure that this doesn't introduce the bug described in the comment.
>> > 
>> > From only 20 years ago:
>> > 
>> > https://lore.kernel.org/all/20040316170812.GA14971@kroah.com/
>> > 
>> > The particular code (zfcp) was changed, so it doesn't have this code
>> > (or never did?)  anymore, but for the rest this may or may not still
>> > be valid.
>> 
>> I guess relevant may not have been the correct word. Maybe obvious? I
>> can keep the comment but I do not really see what it adds, although
>> reading the above thread, I suppose it was added as justification for
>> calling kfree() as ->release() for a 'struct device'? Kind of seems like
>> that ship has sailed since I see this all over the place as a
>> ->release() function. I do not see how this patch could have a function
>> change beyond that but I may be misreading or misinterpreting your full
>> comment.
>
> That doesn't answer my question what prevents the release function
> from being called after the module has been unloaded.
>
> At least back then when the code was added it was a real bug.

I think the way this should work is to have the allocation and
the release function in the iucv bus driver, with a function
roughly like

struct device *iucv_alloc_device(char *name,
               const struct attribute_group *attrs,
               void *priv)
{
      dev = kzalloc(sizeof(struct device), GFP_KERNEL);
      if (!dev)
           return NULL;

      dev_set_name(dev, "%s", name);
      dev->bus = &iucv_bus;
      dev->parent = iucv_root;
      dev->groups = attrs;
      dev_set_drvdata(dev, priv);
      dev->release = iucv_free_dev;
  
      return dev;
}

Now the release function cannot go away as long as any module
is loaded that links against it, and those modules cannot
go away as long as the devices are in use.

I don't remember how iucv works, but if there is a way to
detect which system services exist, then the actual device
creation should also be separate from the driver using those
services, with another driver responsible for enumerating
the existing services and creating those devices.

      Arnd

  parent reply	other threads:[~2024-04-18 19:46 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-17 18:24 [PATCH 0/3] drivers/s390: Fix instances of -Wcast-function-type-strict Nathan Chancellor
2024-04-17 18:24 ` [PATCH 1/3] s390/vmlogrdr: Remove function pointer cast Nathan Chancellor
2024-04-17 18:55   ` Arnd Bergmann
2024-04-18  5:56   ` Thomas Huth
2024-04-18  9:54   ` Heiko Carstens
2024-04-18 10:25     ` Heiko Carstens
2024-04-18 14:51       ` Nathan Chancellor
2024-04-18 15:15         ` Heiko Carstens
2024-04-18 15:34           ` Nathan Chancellor
2024-04-18 19:21             ` Heiko Carstens
2024-04-18 20:32               ` Nathan Chancellor
2024-04-18 19:46           ` Arnd Bergmann [this message]
2024-04-19 12:15             ` Heiko Carstens
2024-04-19 12:19               ` Arnd Bergmann
2024-04-19 14:12                 ` Heiko Carstens
2024-04-23  7:34                   ` Alexandra Winter
2024-05-06 19:26             ` Heiko Carstens
2024-04-17 18:24 ` [PATCH 2/3] s390/smsgiucv_app: " Nathan Chancellor
2024-04-17 18:56   ` Arnd Bergmann
2024-04-18  5:56   ` Thomas Huth
2024-04-17 18:24 ` [PATCH 3/3] s390/netiucv: " Nathan Chancellor
2024-04-17 18:57   ` Arnd Bergmann
2024-04-18  5:57   ` Thomas Huth

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=798df2d7-b13f-482a-8d4a-106c6492af01@app.fastmail.com \
    --to=arnd@arndb.de \
    --cc=agordeev@linux.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=borntraeger@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=linux-s390@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=nathan@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=svens@linux.ibm.com \
    --cc=twinkler@linux.ibm.com \
    --cc=wintera@linux.ibm.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