All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: "Souza, Jose" <jose.souza@intel.com>
Cc: "Cavitt, Jonathan" <jonathan.cavitt@intel.com>,
	"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>,
	"quic_mojha@quicinc.com" <quic_mojha@quicinc.com>,
	"johannes@sipsolutions.net" <johannes@sipsolutions.net>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout()
Date: Mon, 10 Jun 2024 18:00:21 -0400	[thread overview]
Message-ID: <Zmd3SdVjfjBo-KnL@intel.com> (raw)
In-Reply-To: <f40ea3ddb5434715335b4634f38011ccd79e870c.camel@intel.com>

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
> > > > 
> > > 
> 

  reply	other threads:[~2024-06-10 22:00 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 16:38 ` ✓ CI.Patch_applied: success for series starting with [v5,1/2] devcoredump: Add dev_coredumpm_timeout() Patchwork
2024-06-10 16:38 ` ✓ CI.checkpatch: " Patchwork
2024-06-10 16:39 ` ✓ CI.KUnit: " Patchwork
2024-06-10 16:51 ` ✓ CI.Build: " Patchwork
2024-06-10 16:53 ` ✓ CI.Hooks: " Patchwork
2024-06-10 16:54 ` ✓ CI.checksparse: " Patchwork
2024-06-10 20:16 ` [PATCH v5 1/2] " Rodrigo Vivi
2024-06-10 20:42   ` Cavitt, Jonathan
2024-06-10 20:52     ` Souza, Jose
2024-06-10 22:00       ` Rodrigo Vivi [this message]
2024-06-11  6:19 ` kernel test robot
2024-06-11  7:12 ` ✓ CI.Patch_applied: success for series starting with [v5,1/2] devcoredump: Add dev_coredumpm_timeout() (rev2) Patchwork
2024-06-11  7:12 ` ✓ CI.checkpatch: " Patchwork
2024-06-11  7:13 ` ✓ CI.KUnit: " Patchwork
2024-06-11  7:25 ` ✓ CI.Build: " Patchwork
2024-06-11  7:27 ` ✗ CI.Hooks: failure " Patchwork
2024-06-11  7:29 ` ✓ CI.checksparse: success " Patchwork
2024-06-11  7:51 ` ✓ CI.BAT: " Patchwork
2024-06-11 10:31 ` ✗ CI.FULL: failure " Patchwork
2024-06-11 10:37 ` [PATCH v5 1/2] devcoredump: Add dev_coredumpm_timeout() kernel test robot

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=Zmd3SdVjfjBo-KnL@intel.com \
    --to=rodrigo.vivi@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=johannes@sipsolutions.net \
    --cc=jonathan.cavitt@intel.com \
    --cc=jose.souza@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=quic_mojha@quicinc.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 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.