Re: [PATCH 1/5] driver core: make struct class.dev_uevent() take a const *
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: 2022-11-28 17:25:38
Also in:
linux-block, linux-media, linux-nvme, linux-pm, linux-rdma, linux-usb, linux-wireless, lkml
On Sun, Nov 27, 2022 at 06:38:39PM -0800, Bart Van Assche wrote:
On 11/27/22 05:45, Greg Kroah-Hartman wrote:quoted
On Fri, Nov 25, 2022 at 03:51:11PM -0800, Bart Van Assche wrote:quoted
On 11/23/22 04:25, Greg Kroah-Hartman wrote:quoted
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 7dd1f01ec4f9..7aab4a769736 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h@@ -586,7 +586,7 @@ extern struct mISDNclock *mISDN_register_clock(char *, int, clockctl_func_t *, void *); extern void mISDN_unregister_clock(struct mISDNclock *); -static inline struct mISDNdevice *dev_to_mISDN(struct device *dev) +static inline struct mISDNdevice *dev_to_mISDN(const struct device *dev) { if (dev) return dev_get_drvdata(dev);Why does the dev_to_mISDN() function drop constness? I haven't found an explanation for this in the cover letter.I agree, this is going to be fixed up, see the thread starting here: https://lore.kernel.org/r/Y34+V2bCDdqujBDk@kroah.com (local) I'll work on making a const / non const version for these so that we don't loose the marking. Oh wait, no, this function is fine, it's not modifying the device structure at all, and only returning the pointer in the private data stored in the device. There is no loss of const-ness here.Hi Greg, This is what I found in include/linux/mISDNif.h: struct mISDNdevice { struct mISDNchannel D; u_int id; u_int Dprotocols; u_int Bprotocols; u_int nrbchan; u_char channelmap[MISDN_CHMAP_SIZE]; struct list_head bchannels; struct mISDNchannel *teimgr; struct device dev; }; As one can see 'dev' is a member of struct mISDNdevice. I still think that dev_to_mISDN() drops constness. Did I perhaps overlook something?
I think you are missing that dev_to_mISDN() is doing something different
than most dev_to_FOO() functions do (i.e. there is no container_of()
call here at all):
static inline struct mISDNdevice *dev_to_mISDN(struct device *dev)
{
if (dev)
return dev_get_drvdata(dev);
else
return NULL;
}
See, no pointer mess or anything else here, all that happens is the
driver data pointer in struct device is returned.
If this was a "normal" dev_to_FOO() function, then yes, the const-ness
of the pointer would be called into question as the thread I linked to
discusses.
thanks,
greg k-h