* [PATCHv2] base: force NOIO allocations during unplug
@ 2020-09-16 19:15 Oliver Neukum
2020-09-17 6:41 ` Greg KH
0 siblings, 1 reply; 2+ messages in thread
From: Oliver Neukum @ 2020-09-16 19:15 UTC (permalink / raw)
To: gregKH, linux-usb, stern; +Cc: Oliver Neukum
There is one overlooked situation under which a driver
must not do IO to allocate memory. You cannot do that
while disconnecting a device. A device being disconnected
is no longer functional in most cases, yet IO may fail
only when the handler runs.
v2: extended section for NOIO until after second notifier chain
Signed-off-by: Oliver Neukum <oneukum@suse.com>
---
drivers/base/core.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/base/core.c b/drivers/base/core.c
index bb5806a2bd4c..b79783454293 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -26,6 +26,7 @@
#include <linux/pm_runtime.h>
#include <linux/netdevice.h>
#include <linux/sched/signal.h>
+#include <linux/sched/mm.h>
#include <linux/sysfs.h>
#include "base.h"
@@ -3062,6 +3063,7 @@ void device_del(struct device *dev)
struct device *parent = dev->parent;
struct kobject *glue_dir = NULL;
struct class_interface *class_intf;
+ unsigned int noio_flag;
device_lock(dev);
kill_device(dev);
@@ -3073,6 +3075,7 @@ void device_del(struct device *dev)
/* Notify clients of device removal. This call must come
* before dpm_sysfs_remove().
*/
+ noio_flag = memalloc_noio_save();
if (dev->bus)
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
BUS_NOTIFY_DEL_DEVICE, dev);
@@ -3114,6 +3117,7 @@ void device_del(struct device *dev)
glue_dir = get_glue_dir(dev);
kobject_del(&dev->kobj);
cleanup_glue_dir(dev, glue_dir);
+ memalloc_noio_restore(noio_flag);
put_device(parent);
}
EXPORT_SYMBOL_GPL(device_del);
--
2.16.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCHv2] base: force NOIO allocations during unplug
2020-09-16 19:15 [PATCHv2] base: force NOIO allocations during unplug Oliver Neukum
@ 2020-09-17 6:41 ` Greg KH
0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2020-09-17 6:41 UTC (permalink / raw)
To: Oliver Neukum; +Cc: linux-usb, stern
On Wed, Sep 16, 2020 at 09:15:44PM +0200, Oliver Neukum wrote:
> There is one overlooked situation under which a driver
> must not do IO to allocate memory. You cannot do that
> while disconnecting a device. A device being disconnected
> is no longer functional in most cases, yet IO may fail
> only when the handler runs.
>
> v2: extended section for NOIO until after second notifier chain
>
> Signed-off-by: Oliver Neukum <oneukum@suse.com>
> ---
> drivers/base/core.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index bb5806a2bd4c..b79783454293 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -26,6 +26,7 @@
> #include <linux/pm_runtime.h>
> #include <linux/netdevice.h>
> #include <linux/sched/signal.h>
> +#include <linux/sched/mm.h>
> #include <linux/sysfs.h>
>
> #include "base.h"
> @@ -3062,6 +3063,7 @@ void device_del(struct device *dev)
> struct device *parent = dev->parent;
> struct kobject *glue_dir = NULL;
> struct class_interface *class_intf;
> + unsigned int noio_flag;
>
> device_lock(dev);
> kill_device(dev);
> @@ -3073,6 +3075,7 @@ void device_del(struct device *dev)
> /* Notify clients of device removal. This call must come
> * before dpm_sysfs_remove().
> */
> + noio_flag = memalloc_noio_save();
> if (dev->bus)
> blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> BUS_NOTIFY_DEL_DEVICE, dev);
> @@ -3114,6 +3117,7 @@ void device_del(struct device *dev)
> glue_dir = get_glue_dir(dev);
> kobject_del(&dev->kobj);
> cleanup_glue_dir(dev, glue_dir);
> + memalloc_noio_restore(noio_flag);
> put_device(parent);
> }
> EXPORT_SYMBOL_GPL(device_del);
> --
> 2.16.4
>
Thanks, now queued up.
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-09-17 6:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-16 19:15 [PATCHv2] base: force NOIO allocations during unplug Oliver Neukum
2020-09-17 6:41 ` Greg KH
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.