Skip to content

Commit

Permalink
debugfs: regset32: Add Runtime PM support
Browse files Browse the repository at this point in the history
Hardware registers of devices under control of power management cannot
be accessed at all times.  If such a device is suspended, register
accesses may lead to undefined behavior, like reading bogus values, or
causing exceptions or system lock-ups.

Extend struct debugfs_regset32 with an optional field to let device
drivers specify the device the registers in the set belong to.  This
allows debugfs_show_regset32() to make sure the device is resumed while
its registers are being read.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
geertu authored and herbertx committed Feb 22, 2020
1 parent 9e00df7 commit 30332ee
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
8 changes: 8 additions & 0 deletions fs/debugfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <linux/slab.h>
#include <linux/atomic.h>
#include <linux/device.h>
#include <linux/pm_runtime.h>
#include <linux/poll.h>
#include <linux/security.h>

Expand Down Expand Up @@ -1060,7 +1061,14 @@ static int debugfs_show_regset32(struct seq_file *s, void *data)
{
struct debugfs_regset32 *regset = s->private;

if (regset->dev)
pm_runtime_get_sync(regset->dev);

debugfs_print_regs32(s, regset->regs, regset->nregs, regset->base, "");

if (regset->dev)
pm_runtime_put(regset->dev);

return 0;
}

Expand Down
1 change: 1 addition & 0 deletions include/linux/debugfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ struct debugfs_regset32 {
const struct debugfs_reg32 *regs;
int nregs;
void __iomem *base;
struct device *dev; /* Optional device for Runtime PM */
};

extern struct dentry *arch_debugfs_dir;
Expand Down

0 comments on commit 30332ee

Please sign in to comment.