seq_file: Introduce DEFINE_SHOW_ATTRIBUTE() helper macro

The DEFINE_SHOW_ATTRIBUTE() helper macro would be useful for current
users, which are many of them, and for new comers to decrease code
duplication.

Acked-by: Lee Jones <lee.jones@linaro.org>
Acked-by: Darren Hart (VMware) <dvhart@infradead.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
Andy Shevchenko 2018-01-22 18:05:43 +02:00
Родитель a2e5790d84
Коммит a08f06bb7a
4 изменённых файлов: 14 добавлений и 41 удалений

Просмотреть файл

@ -1258,20 +1258,6 @@ static struct ab8500_prcmu_ranges ab8540_debug_ranges[AB8500_NUM_BANKS] = {
}, },
}; };
#define DEFINE_SHOW_ATTRIBUTE(__name) \
static int __name ## _open(struct inode *inode, struct file *file) \
{ \
return single_open(file, __name ## _show, inode->i_private); \
} \
\
static const struct file_operations __name ## _fops = { \
.owner = THIS_MODULE, \
.open = __name ## _open, \
.read = seq_read, \
.llseek = seq_lseek, \
.release = single_release, \
} \
static irqreturn_t ab8500_debug_handler(int irq, void *data) static irqreturn_t ab8500_debug_handler(int irq, void *data)
{ {
char buf[16]; char buf[16];

Просмотреть файл

@ -208,20 +208,6 @@ static const struct pmc_data cht_data = {
.clks = cht_clks, .clks = cht_clks,
}; };
#define DEFINE_SHOW_ATTRIBUTE(__name) \
static int __name ## _open(struct inode *inode, struct file *file) \
{ \
return single_open(file, __name ## _show, inode->i_private); \
} \
\
static const struct file_operations __name ## _fops = { \
.owner = THIS_MODULE, \
.open = __name ## _open, \
.read = seq_read, \
.llseek = seq_lseek, \
.release = single_release, \
}
static inline u32 pmc_reg_read(struct pmc_dev *pmc, int reg_offset) static inline u32 pmc_reg_read(struct pmc_dev *pmc, int reg_offset)
{ {
return readl(pmc->regmap + reg_offset); return readl(pmc->regmap + reg_offset);

Просмотреть файл

@ -140,6 +140,20 @@ void *__seq_open_private(struct file *, const struct seq_operations *, int);
int seq_open_private(struct file *, const struct seq_operations *, int); int seq_open_private(struct file *, const struct seq_operations *, int);
int seq_release_private(struct inode *, struct file *); int seq_release_private(struct inode *, struct file *);
#define DEFINE_SHOW_ATTRIBUTE(__name) \
static int __name ## _open(struct inode *inode, struct file *file) \
{ \
return single_open(file, __name ## _show, inode->i_private); \
} \
\
static const struct file_operations __name ## _fops = { \
.owner = THIS_MODULE, \
.open = __name ## _open, \
.read = seq_read, \
.llseek = seq_lseek, \
.release = single_release, \
}
static inline struct user_namespace *seq_user_ns(struct seq_file *seq) static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
{ {
#ifdef CONFIG_USER_NS #ifdef CONFIG_USER_NS

Просмотреть файл

@ -90,19 +90,6 @@ static int __name ## _show(struct seq_file *f, void *ptr) \
\ \
DEFINE_SHOW_ATTRIBUTE(__name) DEFINE_SHOW_ATTRIBUTE(__name)
#define DEFINE_SHOW_ATTRIBUTE(__name) \
static int __name ## _open(struct inode *inode, struct file *file) \
{ \
return single_open(file, __name ## _show, inode->i_private); \
} \
\
static const struct file_operations __name ## _fops = { \
.open = __name ## _open, \
.read = seq_read, \
.llseek = seq_lseek, \
.release = single_release, \
} \
static int features_show(struct seq_file *f, void *ptr) static int features_show(struct seq_file *f, void *ptr)
{ {
struct hci_dev *hdev = f->private; struct hci_dev *hdev = f->private;