* [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout()
@ 2024-06-10 16:11 José Roberto de Souza
2024-06-10 16:11 ` [PATCH v5 2/2] drm/xe: Increase devcoredump timeout José Roberto de Souza
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: José Roberto de Souza @ 2024-06-10 16:11 UTC (permalink / raw)
To: linux-kernel, intel-xe
Cc: Rodrigo Vivi, Mukesh Ojha, Johannes Berg, Jonathan Cavitt,
José Roberto de Souza
Add function to set a custom coredump timeout.
For Xe driver usage, current 5 minutes timeout may be too short for
users to search and understand what needs to be done to capture
coredump to report bugs.
We have plans to automate(distribute a udev script) it but at the end
will be up to distros and users to pack it so having a option to
increase the timeout is a safer option.
v2:
- replace dev_coredump_timeout_set() by dev_coredumpm_timeout() (Mukesh)
v3:
- make dev_coredumpm() static inline (Johannes)
v5:
- rename DEVCOREDUMP_TIMEOUT -> DEVCD_TIMEOUT to avoid redefinition
in include/net/bluetooth/coredump.h
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Mukesh Ojha <quic_mojha@quicinc.com>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Jonathan Cavitt <jonathan.cavitt@intel.com>
Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/base/devcoredump.c | 23 ++++++++--------
include/linux/devcoredump.h | 54 ++++++++++++++++++++++++++++---------
2 files changed, 54 insertions(+), 23 deletions(-)
diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c
index 82aeb09b3d1b5..c795edad1b969 100644
--- a/drivers/base/devcoredump.c
+++ b/drivers/base/devcoredump.c
@@ -18,9 +18,6 @@ static struct class devcd_class;
/* global disable flag, for security purposes */
static bool devcd_disabled;
-/* if data isn't read by userspace after 5 minutes then delete it */
-#define DEVCD_TIMEOUT (HZ * 60 * 5)
-
struct devcd_entry {
struct device devcd_dev;
void *data;
@@ -328,7 +325,8 @@ void dev_coredump_put(struct device *dev)
EXPORT_SYMBOL_GPL(dev_coredump_put);
/**
- * dev_coredumpm - create device coredump with read/free methods
+ * dev_coredumpm_timeout - create device coredump with read/free methods with a
+ * custom timeout.
* @dev: the struct device for the crashed device
* @owner: the module that contains the read/free functions, use %THIS_MODULE
* @data: data cookie for the @read/@free functions
@@ -336,17 +334,20 @@ EXPORT_SYMBOL_GPL(dev_coredump_put);
* @gfp: allocation flags
* @read: function to read from the given buffer
* @free: function to free the given buffer
+ * @timeout: time in jiffies to remove coredump
*
* Creates a new device coredump for the given device. If a previous one hasn't
* been read yet, the new coredump is discarded. The data lifetime is determined
* by the device coredump framework and when it is no longer needed the @free
* function will be called to free the data.
*/
-void dev_coredumpm(struct device *dev, struct module *owner,
- void *data, size_t datalen, gfp_t gfp,
- ssize_t (*read)(char *buffer, loff_t offset, size_t count,
- void *data, size_t datalen),
- void (*free)(void *data))
+void dev_coredumpm_timeout(struct device *dev, struct module *owner,
+ void *data, size_t datalen, gfp_t gfp,
+ ssize_t (*read)(char *buffer, loff_t offset,
+ size_t count, void *data,
+ size_t datalen),
+ void (*free)(void *data),
+ unsigned long timeout)
{
static atomic_t devcd_count = ATOMIC_INIT(0);
struct devcd_entry *devcd;
@@ -403,7 +404,7 @@ void dev_coredumpm(struct device *dev, struct module *owner,
dev_set_uevent_suppress(&devcd->devcd_dev, false);
kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD);
INIT_DELAYED_WORK(&devcd->del_wk, devcd_del);
- schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT);
+ schedule_delayed_work(&devcd->del_wk, timeout);
mutex_unlock(&devcd->mutex);
return;
put_device:
@@ -414,7 +415,7 @@ void dev_coredumpm(struct device *dev, struct module *owner,
free:
free(data);
}
-EXPORT_SYMBOL_GPL(dev_coredumpm);
+EXPORT_SYMBOL_GPL(dev_coredumpm_timeout);
/**
* dev_coredumpsg - create device coredump that uses scatterlist as data
diff --git a/include/linux/devcoredump.h b/include/linux/devcoredump.h
index c8f7eb6cc1915..e3de1e545a4a5 100644
--- a/include/linux/devcoredump.h
+++ b/include/linux/devcoredump.h
@@ -12,6 +12,9 @@
#include <linux/scatterlist.h>
#include <linux/slab.h>
+/* if data isn't read by userspace after 5 minutes then delete it */
+#define DEVCD_TIMEOUT (HZ * 60 * 5)
+
/*
* _devcd_free_sgtable - free all the memory of the given scatterlist table
* (i.e. both pages and scatterlist instances)
@@ -50,16 +53,17 @@ static inline void _devcd_free_sgtable(struct scatterlist *table)
kfree(delete_iter);
}
-
#ifdef CONFIG_DEV_COREDUMP
void dev_coredumpv(struct device *dev, void *data, size_t datalen,
gfp_t gfp);
-void dev_coredumpm(struct device *dev, struct module *owner,
- void *data, size_t datalen, gfp_t gfp,
- ssize_t (*read)(char *buffer, loff_t offset, size_t count,
- void *data, size_t datalen),
- void (*free)(void *data));
+void dev_coredumpm_timeout(struct device *dev, struct module *owner,
+ void *data, size_t datalen, gfp_t gfp,
+ ssize_t (*read)(char *buffer, loff_t offset,
+ size_t count, void *data,
+ size_t datalen),
+ void (*free)(void *data),
+ unsigned long timeout);
void dev_coredumpsg(struct device *dev, struct scatterlist *table,
size_t datalen, gfp_t gfp);
@@ -72,12 +76,13 @@ static inline void dev_coredumpv(struct device *dev, void *data,
vfree(data);
}
-static inline void
-dev_coredumpm(struct device *dev, struct module *owner,
- void *data, size_t datalen, gfp_t gfp,
- ssize_t (*read)(char *buffer, loff_t offset, size_t count,
- void *data, size_t datalen),
- void (*free)(void *data))
+void dev_coredumpm_timeout(struct device *dev, struct module *owner,
+ void *data, size_t datalen, gfp_t gfp,
+ ssize_t (*read)(char *buffer, loff_t offset,
+ size_t count, void *data,
+ size_t datalen),
+ void (*free)(void *data),
+ unsigned long timeout)
{
free(data);
}
@@ -92,4 +97,29 @@ static inline void dev_coredump_put(struct device *dev)
}
#endif /* CONFIG_DEV_COREDUMP */
+/**
+ * dev_coredumpm - create device coredump with read/free methods
+ * @dev: the struct device for the crashed device
+ * @owner: the module that contains the read/free functions, use %THIS_MODULE
+ * @data: data cookie for the @read/@free functions
+ * @datalen: length of the data
+ * @gfp: allocation flags
+ * @read: function to read from the given buffer
+ * @free: function to free the given buffer
+ *
+ * Creates a new device coredump for the given device. If a previous one hasn't
+ * been read yet, the new coredump is discarded. The data lifetime is determined
+ * by the device coredump framework and when it is no longer needed the @free
+ * function will be called to free the data.
+ */
+static inline void dev_coredumpm(struct device *dev, struct module *owner,
+ void *data, size_t datalen, gfp_t gfp,
+ ssize_t (*read)(char *buffer, loff_t offset, size_t count,
+ void *data, size_t datalen),
+ void (*free)(void *data))
+{
+ dev_coredumpm_timeout(dev, owner, data, datalen, gfp, read, free,
+ DEVCD_TIMEOUT);
+}
+
#endif /* __DEVCOREDUMP_H */
--
2.45.2
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v5 2/2] drm/xe: Increase devcoredump timeout 2024-06-10 16:11 [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() José Roberto de Souza @ 2024-06-10 16:11 ` José Roberto de Souza 2024-06-10 20:17 ` Rodrigo Vivi 2024-06-10 20:16 ` [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() Rodrigo Vivi ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: José Roberto de Souza @ 2024-06-10 16:11 UTC (permalink / raw) To: linux-kernel, intel-xe Cc: Rodrigo Vivi, Jonathan Cavitt, José Roberto de Souza 5 minutes is too short for a regular user to search and understand what he needs to do to report capture devcoredump and report a bug to us, so here increasing this timeout to 1 hour. Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Jonathan Cavitt <jonathan.cavitt@intel.com> Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com> Signed-off-by: José Roberto de Souza <jose.souza@intel.com> --- drivers/gpu/drm/xe/xe_devcoredump.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c index d7f2d19a77c10..62c2b10fbf1d2 100644 --- a/drivers/gpu/drm/xe/xe_devcoredump.c +++ b/drivers/gpu/drm/xe/xe_devcoredump.c @@ -53,6 +53,9 @@ #ifdef CONFIG_DEV_COREDUMP +/* 1 hour timeout */ +#define XE_COREDUMP_TIMEOUT_JIFFIES (60 * 60 * HZ) + static struct xe_device *coredump_to_xe(const struct xe_devcoredump *coredump) { return container_of(coredump, struct xe_device, devcoredump); @@ -247,8 +250,9 @@ void xe_devcoredump(struct xe_sched_job *job) drm_info(&xe->drm, "Check your /sys/class/drm/card%d/device/devcoredump/data\n", xe->drm.primary->index); - dev_coredumpm(xe->drm.dev, THIS_MODULE, coredump, 0, GFP_KERNEL, - xe_devcoredump_read, xe_devcoredump_free); + dev_coredumpm_timeout(xe->drm.dev, THIS_MODULE, coredump, 0, GFP_KERNEL, + xe_devcoredump_read, xe_devcoredump_free, + XE_COREDUMP_TIMEOUT_JIFFIES); } static void xe_driver_devcoredump_fini(void *arg) -- 2.45.2 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/2] drm/xe: Increase devcoredump timeout 2024-06-10 16:11 ` [PATCH v5 2/2] drm/xe: Increase devcoredump timeout José Roberto de Souza @ 2024-06-10 20:17 ` Rodrigo Vivi 0 siblings, 0 replies; 9+ messages in thread From: Rodrigo Vivi @ 2024-06-10 20:17 UTC (permalink / raw) To: José Roberto de Souza; +Cc: linux-kernel, intel-xe, Jonathan Cavitt On Mon, Jun 10, 2024 at 09:11:33AM -0700, José Roberto de Souza wrote: > 5 minutes is too short for a regular user to search and understand > what he needs to do to report capture devcoredump and report a bug to > us, so here increasing this timeout to 1 hour. > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > Cc: Jonathan Cavitt <jonathan.cavitt@intel.com> > Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com> > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > --- > drivers/gpu/drm/xe/xe_devcoredump.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c > index d7f2d19a77c10..62c2b10fbf1d2 100644 > --- a/drivers/gpu/drm/xe/xe_devcoredump.c > +++ b/drivers/gpu/drm/xe/xe_devcoredump.c > @@ -53,6 +53,9 @@ > > #ifdef CONFIG_DEV_COREDUMP > > +/* 1 hour timeout */ > +#define XE_COREDUMP_TIMEOUT_JIFFIES (60 * 60 * HZ) o.O! 1h?! we should likely already add a config option for that. but anyway, let's move with that and adjust as we go. Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > + > static struct xe_device *coredump_to_xe(const struct xe_devcoredump *coredump) > { > return container_of(coredump, struct xe_device, devcoredump); > @@ -247,8 +250,9 @@ void xe_devcoredump(struct xe_sched_job *job) > drm_info(&xe->drm, "Check your /sys/class/drm/card%d/device/devcoredump/data\n", > xe->drm.primary->index); > > - dev_coredumpm(xe->drm.dev, THIS_MODULE, coredump, 0, GFP_KERNEL, > - xe_devcoredump_read, xe_devcoredump_free); > + dev_coredumpm_timeout(xe->drm.dev, THIS_MODULE, coredump, 0, GFP_KERNEL, > + xe_devcoredump_read, xe_devcoredump_free, > + XE_COREDUMP_TIMEOUT_JIFFIES); > } > > static void xe_driver_devcoredump_fini(void *arg) > -- > 2.45.2 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() 2024-06-10 16:11 [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() José Roberto de Souza 2024-06-10 16:11 ` [PATCH v5 2/2] drm/xe: Increase devcoredump timeout José Roberto de Souza @ 2024-06-10 20:16 ` Rodrigo Vivi 2024-06-10 20:42 ` Cavitt, Jonathan 2024-06-11 6:19 ` kernel test robot 2024-06-11 10:37 ` kernel test robot 3 siblings, 1 reply; 9+ messages in thread From: Rodrigo Vivi @ 2024-06-10 20:16 UTC (permalink / raw) To: José Roberto de Souza Cc: linux-kernel, intel-xe, Mukesh Ojha, Johannes Berg, Jonathan Cavitt On Mon, Jun 10, 2024 at 09:11:32AM -0700, José Roberto de Souza wrote: > Add function to set a custom coredump timeout. > > For Xe driver usage, current 5 minutes timeout may be too short for > users to search and understand what needs to be done to capture > coredump to report bugs. > > We have plans to automate(distribute a udev script) it but at the end > will be up to distros and users to pack it so having a option to > increase the timeout is a safer option. > > v2: > - replace dev_coredump_timeout_set() by dev_coredumpm_timeout() (Mukesh) > > v3: > - make dev_coredumpm() static inline (Johannes) > > v5: > - rename DEVCOREDUMP_TIMEOUT -> DEVCD_TIMEOUT to avoid redefinition > in include/net/bluetooth/coredump.h > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > Cc: Mukesh Ojha <quic_mojha@quicinc.com> > Cc: Johannes Berg <johannes@sipsolutions.net> > Cc: Jonathan Cavitt <jonathan.cavitt@intel.com> > Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com> Jonathan, also ack to merge this through drm-next flow? > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > --- > drivers/base/devcoredump.c | 23 ++++++++-------- > include/linux/devcoredump.h | 54 ++++++++++++++++++++++++++++--------- > 2 files changed, 54 insertions(+), 23 deletions(-) > > diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c > index 82aeb09b3d1b5..c795edad1b969 100644 > --- a/drivers/base/devcoredump.c > +++ b/drivers/base/devcoredump.c > @@ -18,9 +18,6 @@ static struct class devcd_class; > /* global disable flag, for security purposes */ > static bool devcd_disabled; > > -/* if data isn't read by userspace after 5 minutes then delete it */ > -#define DEVCD_TIMEOUT (HZ * 60 * 5) > - > struct devcd_entry { > struct device devcd_dev; > void *data; > @@ -328,7 +325,8 @@ void dev_coredump_put(struct device *dev) > EXPORT_SYMBOL_GPL(dev_coredump_put); > > /** > - * dev_coredumpm - create device coredump with read/free methods > + * dev_coredumpm_timeout - create device coredump with read/free methods with a > + * custom timeout. > * @dev: the struct device for the crashed device > * @owner: the module that contains the read/free functions, use %THIS_MODULE > * @data: data cookie for the @read/@free functions > @@ -336,17 +334,20 @@ EXPORT_SYMBOL_GPL(dev_coredump_put); > * @gfp: allocation flags > * @read: function to read from the given buffer > * @free: function to free the given buffer > + * @timeout: time in jiffies to remove coredump > * > * Creates a new device coredump for the given device. If a previous one hasn't > * been read yet, the new coredump is discarded. The data lifetime is determined > * by the device coredump framework and when it is no longer needed the @free > * function will be called to free the data. > */ > -void dev_coredumpm(struct device *dev, struct module *owner, > - void *data, size_t datalen, gfp_t gfp, > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > - void *data, size_t datalen), > - void (*free)(void *data)) > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > + void *data, size_t datalen, gfp_t gfp, > + ssize_t (*read)(char *buffer, loff_t offset, > + size_t count, void *data, > + size_t datalen), > + void (*free)(void *data), > + unsigned long timeout) > { > static atomic_t devcd_count = ATOMIC_INIT(0); > struct devcd_entry *devcd; > @@ -403,7 +404,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > dev_set_uevent_suppress(&devcd->devcd_dev, false); > kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD); > INIT_DELAYED_WORK(&devcd->del_wk, devcd_del); > - schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT); > + schedule_delayed_work(&devcd->del_wk, timeout); > mutex_unlock(&devcd->mutex); > return; > put_device: > @@ -414,7 +415,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > free: > free(data); > } > -EXPORT_SYMBOL_GPL(dev_coredumpm); > +EXPORT_SYMBOL_GPL(dev_coredumpm_timeout); > > /** > * dev_coredumpsg - create device coredump that uses scatterlist as data > diff --git a/include/linux/devcoredump.h b/include/linux/devcoredump.h > index c8f7eb6cc1915..e3de1e545a4a5 100644 > --- a/include/linux/devcoredump.h > +++ b/include/linux/devcoredump.h > @@ -12,6 +12,9 @@ > #include <linux/scatterlist.h> > #include <linux/slab.h> > > +/* if data isn't read by userspace after 5 minutes then delete it */ > +#define DEVCD_TIMEOUT (HZ * 60 * 5) > + > /* > * _devcd_free_sgtable - free all the memory of the given scatterlist table > * (i.e. both pages and scatterlist instances) > @@ -50,16 +53,17 @@ static inline void _devcd_free_sgtable(struct scatterlist *table) > kfree(delete_iter); > } > > - > #ifdef CONFIG_DEV_COREDUMP > void dev_coredumpv(struct device *dev, void *data, size_t datalen, > gfp_t gfp); > > -void dev_coredumpm(struct device *dev, struct module *owner, > - void *data, size_t datalen, gfp_t gfp, > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > - void *data, size_t datalen), > - void (*free)(void *data)); > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > + void *data, size_t datalen, gfp_t gfp, > + ssize_t (*read)(char *buffer, loff_t offset, > + size_t count, void *data, > + size_t datalen), > + void (*free)(void *data), > + unsigned long timeout); > > void dev_coredumpsg(struct device *dev, struct scatterlist *table, > size_t datalen, gfp_t gfp); > @@ -72,12 +76,13 @@ static inline void dev_coredumpv(struct device *dev, void *data, > vfree(data); > } > > -static inline void > -dev_coredumpm(struct device *dev, struct module *owner, > - void *data, size_t datalen, gfp_t gfp, > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > - void *data, size_t datalen), > - void (*free)(void *data)) > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > + void *data, size_t datalen, gfp_t gfp, > + ssize_t (*read)(char *buffer, loff_t offset, > + size_t count, void *data, > + size_t datalen), > + void (*free)(void *data), > + unsigned long timeout) > { > free(data); > } > @@ -92,4 +97,29 @@ static inline void dev_coredump_put(struct device *dev) > } > #endif /* CONFIG_DEV_COREDUMP */ > > +/** > + * dev_coredumpm - create device coredump with read/free methods > + * @dev: the struct device for the crashed device > + * @owner: the module that contains the read/free functions, use %THIS_MODULE > + * @data: data cookie for the @read/@free functions > + * @datalen: length of the data > + * @gfp: allocation flags > + * @read: function to read from the given buffer > + * @free: function to free the given buffer > + * > + * Creates a new device coredump for the given device. If a previous one hasn't > + * been read yet, the new coredump is discarded. The data lifetime is determined > + * by the device coredump framework and when it is no longer needed the @free > + * function will be called to free the data. > + */ > +static inline void dev_coredumpm(struct device *dev, struct module *owner, > + void *data, size_t datalen, gfp_t gfp, > + ssize_t (*read)(char *buffer, loff_t offset, size_t count, > + void *data, size_t datalen), > + void (*free)(void *data)) > +{ > + dev_coredumpm_timeout(dev, owner, data, datalen, gfp, read, free, > + DEVCD_TIMEOUT); > +} > + > #endif /* __DEVCOREDUMP_H */ > -- > 2.45.2 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() 2024-06-10 20:16 ` [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() Rodrigo Vivi @ 2024-06-10 20:42 ` Cavitt, Jonathan 2024-06-10 20:52 ` Souza, Jose 0 siblings, 1 reply; 9+ messages in thread From: Cavitt, Jonathan @ 2024-06-10 20:42 UTC (permalink / raw) To: Vivi, Rodrigo, Souza, Jose Cc: linux-kernel@vger.kernel.org, intel-xe@lists.freedesktop.org, Mukesh Ojha, Johannes Berg -----Original Message----- From: Vivi, Rodrigo <rodrigo.vivi@intel.com> Sent: Monday, June 10, 2024 1:16 PM To: Souza, Jose <jose.souza@intel.com> Cc: linux-kernel@vger.kernel.org; intel-xe@lists.freedesktop.org; Mukesh Ojha <quic_mojha@quicinc.com>; Johannes Berg <johannes@sipsolutions.net>; Cavitt, Jonathan <jonathan.cavitt@intel.com> Subject: Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() > > On Mon, Jun 10, 2024 at 09:11:32AM -0700, José Roberto de Souza wrote: > > Add function to set a custom coredump timeout. > > > > For Xe driver usage, current 5 minutes timeout may be too short for > > users to search and understand what needs to be done to capture > > coredump to report bugs. > > > > We have plans to automate(distribute a udev script) it but at the end > > will be up to distros and users to pack it so having a option to > > increase the timeout is a safer option. > > > > v2: > > - replace dev_coredump_timeout_set() by dev_coredumpm_timeout() (Mukesh) > > > > v3: > > - make dev_coredumpm() static inline (Johannes) > > > > v5: > > - rename DEVCOREDUMP_TIMEOUT -> DEVCD_TIMEOUT to avoid redefinition > > in include/net/bluetooth/coredump.h > > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > > > Cc: Mukesh Ojha <quic_mojha@quicinc.com> > > Cc: Johannes Berg <johannes@sipsolutions.net> > > Cc: Jonathan Cavitt <jonathan.cavitt@intel.com> > > Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com> > > Jonathan, also ack to merge this through drm-next flow? Ack clear for drm-next flow. Actually, you can upgrade that to a Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com> I provided the Ack back before I knew I was allowed to provide Reviewed-bys, or that they were different from Acks even in my case. I trust that my past-self who originally reviewed this meant for the Ack to be a stand-in as a non-committal RB. -Jonathan Cavitt > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > > --- > > drivers/base/devcoredump.c | 23 ++++++++-------- > > include/linux/devcoredump.h | 54 ++++++++++++++++++++++++++++--------- > > 2 files changed, 54 insertions(+), 23 deletions(-) > > > > diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c > > index 82aeb09b3d1b5..c795edad1b969 100644 > > --- a/drivers/base/devcoredump.c > > +++ b/drivers/base/devcoredump.c > > @@ -18,9 +18,6 @@ static struct class devcd_class; > > /* global disable flag, for security purposes */ > > static bool devcd_disabled; > > > > -/* if data isn't read by userspace after 5 minutes then delete it */ > > -#define DEVCD_TIMEOUT (HZ * 60 * 5) > > - > > struct devcd_entry { > > struct device devcd_dev; > > void *data; > > @@ -328,7 +325,8 @@ void dev_coredump_put(struct device *dev) > > EXPORT_SYMBOL_GPL(dev_coredump_put); > > > > /** > > - * dev_coredumpm - create device coredump with read/free methods > > + * dev_coredumpm_timeout - create device coredump with read/free methods with a > > + * custom timeout. > > * @dev: the struct device for the crashed device > > * @owner: the module that contains the read/free functions, use %THIS_MODULE > > * @data: data cookie for the @read/@free functions > > @@ -336,17 +334,20 @@ EXPORT_SYMBOL_GPL(dev_coredump_put); > > * @gfp: allocation flags > > * @read: function to read from the given buffer > > * @free: function to free the given buffer > > + * @timeout: time in jiffies to remove coredump > > * > > * Creates a new device coredump for the given device. If a previous one hasn't > > * been read yet, the new coredump is discarded. The data lifetime is determined > > * by the device coredump framework and when it is no longer needed the @free > > * function will be called to free the data. > > */ > > -void dev_coredumpm(struct device *dev, struct module *owner, > > - void *data, size_t datalen, gfp_t gfp, > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > - void *data, size_t datalen), > > - void (*free)(void *data)) > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > + void *data, size_t datalen, gfp_t gfp, > > + ssize_t (*read)(char *buffer, loff_t offset, > > + size_t count, void *data, > > + size_t datalen), > > + void (*free)(void *data), > > + unsigned long timeout) > > { > > static atomic_t devcd_count = ATOMIC_INIT(0); > > struct devcd_entry *devcd; > > @@ -403,7 +404,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > > dev_set_uevent_suppress(&devcd->devcd_dev, false); > > kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD); > > INIT_DELAYED_WORK(&devcd->del_wk, devcd_del); > > - schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT); > > + schedule_delayed_work(&devcd->del_wk, timeout); > > mutex_unlock(&devcd->mutex); > > return; > > put_device: > > @@ -414,7 +415,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > > free: > > free(data); > > } > > -EXPORT_SYMBOL_GPL(dev_coredumpm); > > +EXPORT_SYMBOL_GPL(dev_coredumpm_timeout); > > > > /** > > * dev_coredumpsg - create device coredump that uses scatterlist as data > > diff --git a/include/linux/devcoredump.h b/include/linux/devcoredump.h > > index c8f7eb6cc1915..e3de1e545a4a5 100644 > > --- a/include/linux/devcoredump.h > > +++ b/include/linux/devcoredump.h > > @@ -12,6 +12,9 @@ > > #include <linux/scatterlist.h> > > #include <linux/slab.h> > > > > +/* if data isn't read by userspace after 5 minutes then delete it */ > > +#define DEVCD_TIMEOUT (HZ * 60 * 5) > > + > > /* > > * _devcd_free_sgtable - free all the memory of the given scatterlist table > > * (i.e. both pages and scatterlist instances) > > @@ -50,16 +53,17 @@ static inline void _devcd_free_sgtable(struct scatterlist *table) > > kfree(delete_iter); > > } > > > > - > > #ifdef CONFIG_DEV_COREDUMP > > void dev_coredumpv(struct device *dev, void *data, size_t datalen, > > gfp_t gfp); > > > > -void dev_coredumpm(struct device *dev, struct module *owner, > > - void *data, size_t datalen, gfp_t gfp, > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > - void *data, size_t datalen), > > - void (*free)(void *data)); > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > + void *data, size_t datalen, gfp_t gfp, > > + ssize_t (*read)(char *buffer, loff_t offset, > > + size_t count, void *data, > > + size_t datalen), > > + void (*free)(void *data), > > + unsigned long timeout); > > > > void dev_coredumpsg(struct device *dev, struct scatterlist *table, > > size_t datalen, gfp_t gfp); > > @@ -72,12 +76,13 @@ static inline void dev_coredumpv(struct device *dev, void *data, > > vfree(data); > > } > > > > -static inline void > > -dev_coredumpm(struct device *dev, struct module *owner, > > - void *data, size_t datalen, gfp_t gfp, > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > - void *data, size_t datalen), > > - void (*free)(void *data)) > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > + void *data, size_t datalen, gfp_t gfp, > > + ssize_t (*read)(char *buffer, loff_t offset, > > + size_t count, void *data, > > + size_t datalen), > > + void (*free)(void *data), > > + unsigned long timeout) > > { > > free(data); > > } > > @@ -92,4 +97,29 @@ static inline void dev_coredump_put(struct device *dev) > > } > > #endif /* CONFIG_DEV_COREDUMP */ > > > > +/** > > + * dev_coredumpm - create device coredump with read/free methods > > + * @dev: the struct device for the crashed device > > + * @owner: the module that contains the read/free functions, use %THIS_MODULE > > + * @data: data cookie for the @read/@free functions > > + * @datalen: length of the data > > + * @gfp: allocation flags > > + * @read: function to read from the given buffer > > + * @free: function to free the given buffer > > + * > > + * Creates a new device coredump for the given device. If a previous one hasn't > > + * been read yet, the new coredump is discarded. The data lifetime is determined > > + * by the device coredump framework and when it is no longer needed the @free > > + * function will be called to free the data. > > + */ > > +static inline void dev_coredumpm(struct device *dev, struct module *owner, > > + void *data, size_t datalen, gfp_t gfp, > > + ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > + void *data, size_t datalen), > > + void (*free)(void *data)) > > +{ > > + dev_coredumpm_timeout(dev, owner, data, datalen, gfp, read, free, > > + DEVCD_TIMEOUT); > > +} > > + > > #endif /* __DEVCOREDUMP_H */ > > -- > > 2.45.2 > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() 2024-06-10 20:42 ` Cavitt, Jonathan @ 2024-06-10 20:52 ` Souza, Jose 2024-06-10 22:00 ` Rodrigo Vivi 0 siblings, 1 reply; 9+ messages in thread From: Souza, Jose @ 2024-06-10 20:52 UTC (permalink / raw) To: Vivi, Rodrigo, Cavitt, Jonathan Cc: intel-xe@lists.freedesktop.org, quic_mojha@quicinc.com, johannes@sipsolutions.net, linux-kernel@vger.kernel.org On Mon, 2024-06-10 at 20:42 +0000, Cavitt, Jonathan wrote: > -----Original Message----- > From: Vivi, Rodrigo <rodrigo.vivi@intel.com> > Sent: Monday, June 10, 2024 1:16 PM > To: Souza, Jose <jose.souza@intel.com> > Cc: linux-kernel@vger.kernel.org; intel-xe@lists.freedesktop.org; Mukesh Ojha <quic_mojha@quicinc.com>; Johannes Berg <johannes@sipsolutions.net>; Cavitt, Jonathan <jonathan.cavitt@intel.com> > Subject: Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() > > > > On Mon, Jun 10, 2024 at 09:11:32AM -0700, José Roberto de Souza wrote: > > > Add function to set a custom coredump timeout. > > > > > > For Xe driver usage, current 5 minutes timeout may be too short for > > > users to search and understand what needs to be done to capture > > > coredump to report bugs. > > > > > > We have plans to automate(distribute a udev script) it but at the end > > > will be up to distros and users to pack it so having a option to > > > increase the timeout is a safer option. > > > > > > v2: > > > - replace dev_coredump_timeout_set() by dev_coredumpm_timeout() (Mukesh) > > > > > > v3: > > > - make dev_coredumpm() static inline (Johannes) > > > > > > v5: > > > - rename DEVCOREDUMP_TIMEOUT -> DEVCD_TIMEOUT to avoid redefinition > > > in include/net/bluetooth/coredump.h > > > > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > > > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > > > > > Cc: Mukesh Ojha <quic_mojha@quicinc.com> > > > Cc: Johannes Berg <johannes@sipsolutions.net> > > > Cc: Jonathan Cavitt <jonathan.cavitt@intel.com> > > > Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com> > > > > Jonathan, also ack to merge this through drm-next flow? > > Ack clear for drm-next flow. Actually, you can upgrade that to a > Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com> > I provided the Ack back before I knew I was allowed to provide > Reviewed-bys, or that they were different from Acks even in my > case. I trust that my past-self who originally reviewed this meant > for the Ack to be a stand-in as a non-committal RB. Thanks you both but I think we need wait for an ack from Johannes or Mukesh to merge this devcoredump patch. On my other devcoredump patch already merged we also ask from a Greg's ack to merge it through drm-next. > > -Jonathan Cavitt > > > > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > > > --- > > > drivers/base/devcoredump.c | 23 ++++++++-------- > > > include/linux/devcoredump.h | 54 ++++++++++++++++++++++++++++--------- > > > 2 files changed, 54 insertions(+), 23 deletions(-) > > > > > > diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c > > > index 82aeb09b3d1b5..c795edad1b969 100644 > > > --- a/drivers/base/devcoredump.c > > > +++ b/drivers/base/devcoredump.c > > > @@ -18,9 +18,6 @@ static struct class devcd_class; > > > /* global disable flag, for security purposes */ > > > static bool devcd_disabled; > > > > > > -/* if data isn't read by userspace after 5 minutes then delete it */ > > > -#define DEVCD_TIMEOUT (HZ * 60 * 5) > > > - > > > struct devcd_entry { > > > struct device devcd_dev; > > > void *data; > > > @@ -328,7 +325,8 @@ void dev_coredump_put(struct device *dev) > > > EXPORT_SYMBOL_GPL(dev_coredump_put); > > > > > > /** > > > - * dev_coredumpm - create device coredump with read/free methods > > > + * dev_coredumpm_timeout - create device coredump with read/free methods with a > > > + * custom timeout. > > > * @dev: the struct device for the crashed device > > > * @owner: the module that contains the read/free functions, use %THIS_MODULE > > > * @data: data cookie for the @read/@free functions > > > @@ -336,17 +334,20 @@ EXPORT_SYMBOL_GPL(dev_coredump_put); > > > * @gfp: allocation flags > > > * @read: function to read from the given buffer > > > * @free: function to free the given buffer > > > + * @timeout: time in jiffies to remove coredump > > > * > > > * Creates a new device coredump for the given device. If a previous one hasn't > > > * been read yet, the new coredump is discarded. The data lifetime is determined > > > * by the device coredump framework and when it is no longer needed the @free > > > * function will be called to free the data. > > > */ > > > -void dev_coredumpm(struct device *dev, struct module *owner, > > > - void *data, size_t datalen, gfp_t gfp, > > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > - void *data, size_t datalen), > > > - void (*free)(void *data)) > > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > > + void *data, size_t datalen, gfp_t gfp, > > > + ssize_t (*read)(char *buffer, loff_t offset, > > > + size_t count, void *data, > > > + size_t datalen), > > > + void (*free)(void *data), > > > + unsigned long timeout) > > > { > > > static atomic_t devcd_count = ATOMIC_INIT(0); > > > struct devcd_entry *devcd; > > > @@ -403,7 +404,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > > > dev_set_uevent_suppress(&devcd->devcd_dev, false); > > > kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD); > > > INIT_DELAYED_WORK(&devcd->del_wk, devcd_del); > > > - schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT); > > > + schedule_delayed_work(&devcd->del_wk, timeout); > > > mutex_unlock(&devcd->mutex); > > > return; > > > put_device: > > > @@ -414,7 +415,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > > > free: > > > free(data); > > > } > > > -EXPORT_SYMBOL_GPL(dev_coredumpm); > > > +EXPORT_SYMBOL_GPL(dev_coredumpm_timeout); > > > > > > /** > > > * dev_coredumpsg - create device coredump that uses scatterlist as data > > > diff --git a/include/linux/devcoredump.h b/include/linux/devcoredump.h > > > index c8f7eb6cc1915..e3de1e545a4a5 100644 > > > --- a/include/linux/devcoredump.h > > > +++ b/include/linux/devcoredump.h > > > @@ -12,6 +12,9 @@ > > > #include <linux/scatterlist.h> > > > #include <linux/slab.h> > > > > > > +/* if data isn't read by userspace after 5 minutes then delete it */ > > > +#define DEVCD_TIMEOUT (HZ * 60 * 5) > > > + > > > /* > > > * _devcd_free_sgtable - free all the memory of the given scatterlist table > > > * (i.e. both pages and scatterlist instances) > > > @@ -50,16 +53,17 @@ static inline void _devcd_free_sgtable(struct scatterlist *table) > > > kfree(delete_iter); > > > } > > > > > > - > > > #ifdef CONFIG_DEV_COREDUMP > > > void dev_coredumpv(struct device *dev, void *data, size_t datalen, > > > gfp_t gfp); > > > > > > -void dev_coredumpm(struct device *dev, struct module *owner, > > > - void *data, size_t datalen, gfp_t gfp, > > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > - void *data, size_t datalen), > > > - void (*free)(void *data)); > > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > > + void *data, size_t datalen, gfp_t gfp, > > > + ssize_t (*read)(char *buffer, loff_t offset, > > > + size_t count, void *data, > > > + size_t datalen), > > > + void (*free)(void *data), > > > + unsigned long timeout); > > > > > > void dev_coredumpsg(struct device *dev, struct scatterlist *table, > > > size_t datalen, gfp_t gfp); > > > @@ -72,12 +76,13 @@ static inline void dev_coredumpv(struct device *dev, void *data, > > > vfree(data); > > > } > > > > > > -static inline void > > > -dev_coredumpm(struct device *dev, struct module *owner, > > > - void *data, size_t datalen, gfp_t gfp, > > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > - void *data, size_t datalen), > > > - void (*free)(void *data)) > > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > > + void *data, size_t datalen, gfp_t gfp, > > > + ssize_t (*read)(char *buffer, loff_t offset, > > > + size_t count, void *data, > > > + size_t datalen), > > > + void (*free)(void *data), > > > + unsigned long timeout) > > > { > > > free(data); > > > } > > > @@ -92,4 +97,29 @@ static inline void dev_coredump_put(struct device *dev) > > > } > > > #endif /* CONFIG_DEV_COREDUMP */ > > > > > > +/** > > > + * dev_coredumpm - create device coredump with read/free methods > > > + * @dev: the struct device for the crashed device > > > + * @owner: the module that contains the read/free functions, use %THIS_MODULE > > > + * @data: data cookie for the @read/@free functions > > > + * @datalen: length of the data > > > + * @gfp: allocation flags > > > + * @read: function to read from the given buffer > > > + * @free: function to free the given buffer > > > + * > > > + * Creates a new device coredump for the given device. If a previous one hasn't > > > + * been read yet, the new coredump is discarded. The data lifetime is determined > > > + * by the device coredump framework and when it is no longer needed the @free > > > + * function will be called to free the data. > > > + */ > > > +static inline void dev_coredumpm(struct device *dev, struct module *owner, > > > + void *data, size_t datalen, gfp_t gfp, > > > + ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > + void *data, size_t datalen), > > > + void (*free)(void *data)) > > > +{ > > > + dev_coredumpm_timeout(dev, owner, data, datalen, gfp, read, free, > > > + DEVCD_TIMEOUT); > > > +} > > > + > > > #endif /* __DEVCOREDUMP_H */ > > > -- > > > 2.45.2 > > > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() 2024-06-10 20:52 ` Souza, Jose @ 2024-06-10 22:00 ` Rodrigo Vivi 0 siblings, 0 replies; 9+ messages in thread From: Rodrigo Vivi @ 2024-06-10 22:00 UTC (permalink / raw) To: Souza, Jose Cc: Cavitt, Jonathan, intel-xe@lists.freedesktop.org, quic_mojha@quicinc.com, johannes@sipsolutions.net, linux-kernel@vger.kernel.org On Mon, Jun 10, 2024 at 04:52:11PM -0400, Souza, Jose wrote: > On Mon, 2024-06-10 at 20:42 +0000, Cavitt, Jonathan wrote: > > -----Original Message----- > > From: Vivi, Rodrigo <rodrigo.vivi@intel.com> > > Sent: Monday, June 10, 2024 1:16 PM > > To: Souza, Jose <jose.souza@intel.com> > > Cc: linux-kernel@vger.kernel.org; intel-xe@lists.freedesktop.org; Mukesh Ojha <quic_mojha@quicinc.com>; Johannes Berg <johannes@sipsolutions.net>; Cavitt, Jonathan <jonathan.cavitt@intel.com> > > Subject: Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() > > > > > > On Mon, Jun 10, 2024 at 09:11:32AM -0700, José Roberto de Souza wrote: > > > > Add function to set a custom coredump timeout. > > > > > > > > For Xe driver usage, current 5 minutes timeout may be too short for > > > > users to search and understand what needs to be done to capture > > > > coredump to report bugs. > > > > > > > > We have plans to automate(distribute a udev script) it but at the end > > > > will be up to distros and users to pack it so having a option to > > > > increase the timeout is a safer option. > > > > > > > > v2: > > > > - replace dev_coredump_timeout_set() by dev_coredumpm_timeout() (Mukesh) > > > > > > > > v3: > > > > - make dev_coredumpm() static inline (Johannes) > > > > > > > > v5: > > > > - rename DEVCOREDUMP_TIMEOUT -> DEVCD_TIMEOUT to avoid redefinition > > > > in include/net/bluetooth/coredump.h > > > > > > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > > > > > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > > > > > > > Cc: Mukesh Ojha <quic_mojha@quicinc.com> > > > > Cc: Johannes Berg <johannes@sipsolutions.net> > > > > Cc: Jonathan Cavitt <jonathan.cavitt@intel.com> > > > > Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com> > > > > > > Jonathan, also ack to merge this through drm-next flow? > > > > Ack clear for drm-next flow. Actually, you can upgrade that to a > > Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com> > > I provided the Ack back before I knew I was allowed to provide > > Reviewed-bys, or that they were different from Acks even in my > > case. I trust that my past-self who originally reviewed this meant > > for the Ack to be a stand-in as a non-committal RB. > > > Thanks you both but I think we need wait for an ack from Johannes or Mukesh to merge this devcoredump patch. > On my other devcoredump patch already merged we also ask from a Greg's ack to merge it through drm-next. My bad. I'm sorry. Of course I meant to ask ack from Johannes there. I though he had acked this approach already. > > > > > > -Jonathan Cavitt > > > > > > > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > > > > --- > > > > drivers/base/devcoredump.c | 23 ++++++++-------- > > > > include/linux/devcoredump.h | 54 ++++++++++++++++++++++++++++--------- > > > > 2 files changed, 54 insertions(+), 23 deletions(-) > > > > > > > > diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c > > > > index 82aeb09b3d1b5..c795edad1b969 100644 > > > > --- a/drivers/base/devcoredump.c > > > > +++ b/drivers/base/devcoredump.c > > > > @@ -18,9 +18,6 @@ static struct class devcd_class; > > > > /* global disable flag, for security purposes */ > > > > static bool devcd_disabled; > > > > > > > > -/* if data isn't read by userspace after 5 minutes then delete it */ > > > > -#define DEVCD_TIMEOUT (HZ * 60 * 5) > > > > - > > > > struct devcd_entry { > > > > struct device devcd_dev; > > > > void *data; > > > > @@ -328,7 +325,8 @@ void dev_coredump_put(struct device *dev) > > > > EXPORT_SYMBOL_GPL(dev_coredump_put); > > > > > > > > /** > > > > - * dev_coredumpm - create device coredump with read/free methods > > > > + * dev_coredumpm_timeout - create device coredump with read/free methods with a > > > > + * custom timeout. > > > > * @dev: the struct device for the crashed device > > > > * @owner: the module that contains the read/free functions, use %THIS_MODULE > > > > * @data: data cookie for the @read/@free functions > > > > @@ -336,17 +334,20 @@ EXPORT_SYMBOL_GPL(dev_coredump_put); > > > > * @gfp: allocation flags > > > > * @read: function to read from the given buffer > > > > * @free: function to free the given buffer > > > > + * @timeout: time in jiffies to remove coredump > > > > * > > > > * Creates a new device coredump for the given device. If a previous one hasn't > > > > * been read yet, the new coredump is discarded. The data lifetime is determined > > > > * by the device coredump framework and when it is no longer needed the @free > > > > * function will be called to free the data. > > > > */ > > > > -void dev_coredumpm(struct device *dev, struct module *owner, > > > > - void *data, size_t datalen, gfp_t gfp, > > > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > > - void *data, size_t datalen), > > > > - void (*free)(void *data)) > > > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > > > + void *data, size_t datalen, gfp_t gfp, > > > > + ssize_t (*read)(char *buffer, loff_t offset, > > > > + size_t count, void *data, > > > > + size_t datalen), > > > > + void (*free)(void *data), > > > > + unsigned long timeout) > > > > { > > > > static atomic_t devcd_count = ATOMIC_INIT(0); > > > > struct devcd_entry *devcd; > > > > @@ -403,7 +404,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > > > > dev_set_uevent_suppress(&devcd->devcd_dev, false); > > > > kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD); > > > > INIT_DELAYED_WORK(&devcd->del_wk, devcd_del); > > > > - schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT); > > > > + schedule_delayed_work(&devcd->del_wk, timeout); > > > > mutex_unlock(&devcd->mutex); > > > > return; > > > > put_device: > > > > @@ -414,7 +415,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, > > > > free: > > > > free(data); > > > > } > > > > -EXPORT_SYMBOL_GPL(dev_coredumpm); > > > > +EXPORT_SYMBOL_GPL(dev_coredumpm_timeout); > > > > > > > > /** > > > > * dev_coredumpsg - create device coredump that uses scatterlist as data > > > > diff --git a/include/linux/devcoredump.h b/include/linux/devcoredump.h > > > > index c8f7eb6cc1915..e3de1e545a4a5 100644 > > > > --- a/include/linux/devcoredump.h > > > > +++ b/include/linux/devcoredump.h > > > > @@ -12,6 +12,9 @@ > > > > #include <linux/scatterlist.h> > > > > #include <linux/slab.h> > > > > > > > > +/* if data isn't read by userspace after 5 minutes then delete it */ > > > > +#define DEVCD_TIMEOUT (HZ * 60 * 5) > > > > + > > > > /* > > > > * _devcd_free_sgtable - free all the memory of the given scatterlist table > > > > * (i.e. both pages and scatterlist instances) > > > > @@ -50,16 +53,17 @@ static inline void _devcd_free_sgtable(struct scatterlist *table) > > > > kfree(delete_iter); > > > > } > > > > > > > > - > > > > #ifdef CONFIG_DEV_COREDUMP > > > > void dev_coredumpv(struct device *dev, void *data, size_t datalen, > > > > gfp_t gfp); > > > > > > > > -void dev_coredumpm(struct device *dev, struct module *owner, > > > > - void *data, size_t datalen, gfp_t gfp, > > > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > > - void *data, size_t datalen), > > > > - void (*free)(void *data)); > > > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > > > + void *data, size_t datalen, gfp_t gfp, > > > > + ssize_t (*read)(char *buffer, loff_t offset, > > > > + size_t count, void *data, > > > > + size_t datalen), > > > > + void (*free)(void *data), > > > > + unsigned long timeout); > > > > > > > > void dev_coredumpsg(struct device *dev, struct scatterlist *table, > > > > size_t datalen, gfp_t gfp); > > > > @@ -72,12 +76,13 @@ static inline void dev_coredumpv(struct device *dev, void *data, > > > > vfree(data); > > > > } > > > > > > > > -static inline void > > > > -dev_coredumpm(struct device *dev, struct module *owner, > > > > - void *data, size_t datalen, gfp_t gfp, > > > > - ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > > - void *data, size_t datalen), > > > > - void (*free)(void *data)) > > > > +void dev_coredumpm_timeout(struct device *dev, struct module *owner, > > > > + void *data, size_t datalen, gfp_t gfp, > > > > + ssize_t (*read)(char *buffer, loff_t offset, > > > > + size_t count, void *data, > > > > + size_t datalen), > > > > + void (*free)(void *data), > > > > + unsigned long timeout) > > > > { > > > > free(data); > > > > } > > > > @@ -92,4 +97,29 @@ static inline void dev_coredump_put(struct device *dev) > > > > } > > > > #endif /* CONFIG_DEV_COREDUMP */ > > > > > > > > +/** > > > > + * dev_coredumpm - create device coredump with read/free methods > > > > + * @dev: the struct device for the crashed device > > > > + * @owner: the module that contains the read/free functions, use %THIS_MODULE > > > > + * @data: data cookie for the @read/@free functions > > > > + * @datalen: length of the data > > > > + * @gfp: allocation flags > > > > + * @read: function to read from the given buffer > > > > + * @free: function to free the given buffer > > > > + * > > > > + * Creates a new device coredump for the given device. If a previous one hasn't > > > > + * been read yet, the new coredump is discarded. The data lifetime is determined > > > > + * by the device coredump framework and when it is no longer needed the @free > > > > + * function will be called to free the data. > > > > + */ > > > > +static inline void dev_coredumpm(struct device *dev, struct module *owner, > > > > + void *data, size_t datalen, gfp_t gfp, > > > > + ssize_t (*read)(char *buffer, loff_t offset, size_t count, > > > > + void *data, size_t datalen), > > > > + void (*free)(void *data)) > > > > +{ > > > > + dev_coredumpm_timeout(dev, owner, data, datalen, gfp, read, free, > > > > + DEVCD_TIMEOUT); > > > > +} > > > > + > > > > #endif /* __DEVCOREDUMP_H */ > > > > -- > > > > 2.45.2 > > > > > > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() 2024-06-10 16:11 [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() José Roberto de Souza 2024-06-10 16:11 ` [PATCH v5 2/2] drm/xe: Increase devcoredump timeout José Roberto de Souza 2024-06-10 20:16 ` [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() Rodrigo Vivi @ 2024-06-11 6:19 ` kernel test robot 2024-06-11 10:37 ` kernel test robot 3 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2024-06-11 6:19 UTC (permalink / raw) To: José Roberto de Souza, linux-kernel, intel-xe Cc: oe-kbuild-all, Rodrigo Vivi, Mukesh Ojha, Johannes Berg, Jonathan Cavitt, José Roberto de Souza Hi José, kernel test robot noticed the following build errors: [auto build test ERROR on drm-xe/drm-xe-next] [also build test ERROR on wireless/main linus/master v6.10-rc3 next-20240607] [cannot apply to driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus wireless-next/main] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jos-Roberto-de-Souza/drm-xe-Increase-devcoredump-timeout/20240611-001400 base: https://gitlab.freedesktop.org/drm/xe/kernel.git drm-xe-next patch link: https://lore.kernel.org/r/20240610161133.156566-1-jose.souza%40intel.com patch subject: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() config: i386-buildonly-randconfig-004-20240611 (https://download.01.org/0day-ci/archive/20240611/202406111410.gmDjiFQR-lkp@intel.com/config) compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240611/202406111410.gmDjiFQR-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202406111410.gmDjiFQR-lkp@intel.com/ All errors (new ones prefixed by >>): ld: sound/soc/intel/avs/apl.o: in function `dev_coredumpm_timeout': >> apl.c:(.text+0x64c): multiple definition of `dev_coredumpm_timeout'; sound/soc/intel/avs/skl.o:skl.c:(.text+0x2d0): first defined here -- In file included from drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c:26:0: >> include/linux/devcoredump.h:79:6: error: no previous prototype for 'dev_coredumpm_timeout' [-Werror=missing-prototypes] void dev_coredumpm_timeout(struct device *dev, struct module *owner, ^~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() 2024-06-10 16:11 [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() José Roberto de Souza ` (2 preceding siblings ...) 2024-06-11 6:19 ` kernel test robot @ 2024-06-11 10:37 ` kernel test robot 3 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2024-06-11 10:37 UTC (permalink / raw) To: José Roberto de Souza, linux-kernel, intel-xe Cc: oe-kbuild-all, Rodrigo Vivi, Mukesh Ojha, Johannes Berg, Jonathan Cavitt, José Roberto de Souza Hi José, kernel test robot noticed the following build errors: [auto build test ERROR on drm-xe/drm-xe-next] [also build test ERROR on wireless-next/main wireless/main linus/master v6.10-rc3 next-20240611] [cannot apply to driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jos-Roberto-de-Souza/drm-xe-Increase-devcoredump-timeout/20240611-001400 base: https://gitlab.freedesktop.org/drm/xe/kernel.git drm-xe-next patch link: https://lore.kernel.org/r/20240610161133.156566-1-jose.souza%40intel.com patch subject: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() config: i386-randconfig-141-20240611 (https://download.01.org/0day-ci/archive/20240611/202406111852.SdIM9NWt-lkp@intel.com/config) compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240611/202406111852.SdIM9NWt-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202406111852.SdIM9NWt-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from drivers/gpu/drm/xe/xe_devcoredump.c:9: >> include/linux/devcoredump.h:79:6: error: no previous prototype for function 'dev_coredumpm_timeout' [-Werror,-Wmissing-prototypes] 79 | void dev_coredumpm_timeout(struct device *dev, struct module *owner, | ^ include/linux/devcoredump.h:79:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 79 | void dev_coredumpm_timeout(struct device *dev, struct module *owner, | ^ | static 1 error generated. vim +/dev_coredumpm_timeout +79 include/linux/devcoredump.h 78 > 79 void dev_coredumpm_timeout(struct device *dev, struct module *owner, 80 void *data, size_t datalen, gfp_t gfp, 81 ssize_t (*read)(char *buffer, loff_t offset, 82 size_t count, void *data, 83 size_t datalen), 84 void (*free)(void *data), 85 unsigned long timeout) 86 { 87 free(data); 88 } 89 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-06-11 10:38 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-06-10 16:11 [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() José Roberto de Souza 2024-06-10 16:11 ` [PATCH v5 2/2] drm/xe: Increase devcoredump timeout José Roberto de Souza 2024-06-10 20:17 ` Rodrigo Vivi 2024-06-10 20:16 ` [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() Rodrigo Vivi 2024-06-10 20:42 ` Cavitt, Jonathan 2024-06-10 20:52 ` Souza, Jose 2024-06-10 22:00 ` Rodrigo Vivi 2024-06-11 6:19 ` kernel test robot 2024-06-11 10:37 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox