Device driver .shutdown() VS .remove()

Luca Ceresoli luca at
Mon Apr 26 10:37:33 EDT 2021

Hi Jim,

thanks for the discussion.

On 22/04/21 20:05, jim.cromie at wrote:
> On Thu, Apr 22, 2021 at 1:37 AM Luca Ceresoli <luca at
> <mailto:luca at>> wrote:
>     Hello,
>     despite having been searching for documentation I couldn't find out the
>     exact and detailed difference between the .shutdown() and .remove()
>     calls in struct device_driver.
> so, I'll start by saying I know next to nothing, but most of what you
> said sounds good

Good to know.

>     From the above it looks like the shutdown() actions must be a subset of
>     remove() actions.
> but subset is a bit vague.
> theres 2 dimensions to think about.
> lifetime -  shutdown/startup is surely the longer window, add/remove
> happen within that
> hierarchy - subsystems must be ready to handle add / remove
> fwiw, I 'grepped' (with ack), it shows a few drivers with both functions,
> many others with just remove
> you could see in detail what the difference is.
> $> ack '(\.remove|\.shutdown)\b' drivers/
> drivers/rtc/rtc-twl.c
> 645: .remove = twl_rtc_remove,
> 646: .shutdown = twl_rtc_shutdown,

I've been looking at a few of the drivers that implement both calls, and
they either look similar or they call the shutdown function within the
remove function. This reinforces the idea that remove() should do the
same things as shutdown() plus free all kernel resources.

The only exception that I noticed happen for devices that don't have to
be completely turned off during shutdown or reboot, such as RTCs.


More information about the Kernelnewbies mailing list