> > At present, I just add command history print and > you can add various vendor regions. > > Signed-off-by: Kiwoong Kim <kwmad.kim@xxxxxxxxxxx> > --- > drivers/scsi/ufs/ufs-exynos.c | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/drivers/scsi/ufs/ufs-exynos.c b/drivers/scsi/ufs/ufs-exynos.c > index 8c60f7d..815c361 100644 > --- a/drivers/scsi/ufs/ufs-exynos.c > +++ b/drivers/scsi/ufs/ufs-exynos.c > @@ -1246,6 +1246,29 @@ static int exynos_ufs_resume(struct ufs_hba *hba, > enum ufs_pm_op pm_op) > return 0; > } > > +static void exynos_ufs_dbg_register_dump(struct ufs_hba *hba) > +{ > + struct exynos_ufs *ufs = ufshcd_get_variant(hba); > + unsigned long flags; > + > + spin_lock_irqsave(&ufs->dbg_lock, flags); > + if (ufs->under_dump == 0) If you would use test_and_set_bit it would save you both under_dump and dbg_lock ? > + ufs->under_dump = 1; > + else { > + spin_unlock_irqrestore(&ufs->dbg_lock, flags); > + goto out; > + } > + spin_unlock_irqrestore(&ufs->dbg_lock, flags); > + > + exynos_ufs_dump_info(&ufs->handle, hba->dev); > + > + spin_lock_irqsave(&ufs->dbg_lock, flags); > + ufs->under_dump = 0; > + spin_unlock_irqrestore(&ufs->dbg_lock, flags); > +out: > + return; > +} > + > static struct ufs_hba_variant_ops ufs_hba_exynos_ops = { > .name = "exynos_ufs", > .init = exynos_ufs_init, > @@ -1258,6 +1281,7 @@ static struct ufs_hba_variant_ops > ufs_hba_exynos_ops = { > .hibern8_notify = exynos_ufs_hibern8_notify, > .suspend = exynos_ufs_suspend, > .resume = exynos_ufs_resume, > + .dbg_register_dump = exynos_ufs_dbg_register_dump, > }; > > static int exynos_ufs_probe(struct platform_device *pdev) > -- > 2.7.4