mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 14:20:55 +07:00
912ebd99ed
When calling debugfs functions, there is no need to ever check the return value. The function can work or not, but the code logic should never do something different based on this. [ bp: Make edac_debugfs_init() return void too, while at it. ] Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: James Morse <james.morse@arm.com> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Cc: linux-edac <linux-edac@vger.kernel.org> Link: https://lkml.kernel.org/r/20190122152151.16139-17-gregkh@linuxfoundation.org
130 lines
4.6 KiB
C
130 lines
4.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
/*
|
|
* edac_module.h
|
|
*
|
|
* For defining functions/data for within the EDAC_CORE module only
|
|
*
|
|
* written by doug thompson <norsk5@xmission.h>
|
|
*/
|
|
|
|
#ifndef __EDAC_MODULE_H__
|
|
#define __EDAC_MODULE_H__
|
|
|
|
#include "edac_mc.h"
|
|
#include "edac_pci.h"
|
|
#include "edac_device.h"
|
|
|
|
/*
|
|
* INTERNAL EDAC MODULE:
|
|
* EDAC memory controller sysfs create/remove functions
|
|
* and setup/teardown functions
|
|
*
|
|
* edac_mc objects
|
|
*/
|
|
/* on edac_mc_sysfs.c */
|
|
int edac_mc_sysfs_init(void);
|
|
void edac_mc_sysfs_exit(void);
|
|
extern int edac_create_sysfs_mci_device(struct mem_ctl_info *mci,
|
|
const struct attribute_group **groups);
|
|
extern void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci);
|
|
void edac_unregister_sysfs(struct mem_ctl_info *mci);
|
|
extern int edac_get_log_ue(void);
|
|
extern int edac_get_log_ce(void);
|
|
extern int edac_get_panic_on_ue(void);
|
|
extern int edac_mc_get_log_ue(void);
|
|
extern int edac_mc_get_log_ce(void);
|
|
extern int edac_mc_get_panic_on_ue(void);
|
|
extern int edac_get_poll_msec(void);
|
|
extern int edac_mc_get_poll_msec(void);
|
|
|
|
unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf,
|
|
unsigned len);
|
|
|
|
/* on edac_device.c */
|
|
extern int edac_device_register_sysfs_main_kobj(
|
|
struct edac_device_ctl_info *edac_dev);
|
|
extern void edac_device_unregister_sysfs_main_kobj(
|
|
struct edac_device_ctl_info *edac_dev);
|
|
extern int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev);
|
|
extern void edac_device_remove_sysfs(struct edac_device_ctl_info *edac_dev);
|
|
|
|
/* edac core workqueue: single CPU mode */
|
|
int edac_workqueue_setup(void);
|
|
void edac_workqueue_teardown(void);
|
|
bool edac_queue_work(struct delayed_work *work, unsigned long delay);
|
|
bool edac_stop_work(struct delayed_work *work);
|
|
bool edac_mod_work(struct delayed_work *work, unsigned long delay);
|
|
|
|
extern void edac_device_reset_delay_period(struct edac_device_ctl_info
|
|
*edac_dev, unsigned long value);
|
|
extern void edac_mc_reset_delay_period(unsigned long value);
|
|
|
|
extern void *edac_align_ptr(void **p, unsigned size, int n_elems);
|
|
|
|
/*
|
|
* EDAC debugfs functions
|
|
*/
|
|
|
|
#define edac_debugfs_remove_recursive debugfs_remove_recursive
|
|
#define edac_debugfs_remove debugfs_remove
|
|
#ifdef CONFIG_EDAC_DEBUG
|
|
void edac_debugfs_init(void);
|
|
void edac_debugfs_exit(void);
|
|
void edac_create_debugfs_nodes(struct mem_ctl_info *mci);
|
|
struct dentry *edac_debugfs_create_dir(const char *dirname);
|
|
struct dentry *
|
|
edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent);
|
|
struct dentry *
|
|
edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent,
|
|
void *data, const struct file_operations *fops);
|
|
struct dentry *
|
|
edac_debugfs_create_x8(const char *name, umode_t mode, struct dentry *parent, u8 *value);
|
|
struct dentry *
|
|
edac_debugfs_create_x16(const char *name, umode_t mode, struct dentry *parent, u16 *value);
|
|
#else
|
|
static inline void edac_debugfs_init(void) { }
|
|
static inline void edac_debugfs_exit(void) { }
|
|
static inline void edac_create_debugfs_nodes(struct mem_ctl_info *mci) { }
|
|
static inline struct dentry *edac_debugfs_create_dir(const char *dirname) { return NULL; }
|
|
static inline struct dentry *
|
|
edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent) { return NULL; }
|
|
static inline struct dentry *
|
|
edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent,
|
|
void *data, const struct file_operations *fops) { return NULL; }
|
|
static inline struct dentry *
|
|
edac_debugfs_create_x8(const char *name, umode_t mode,
|
|
struct dentry *parent, u8 *value) { return NULL; }
|
|
static inline struct dentry *
|
|
edac_debugfs_create_x16(const char *name, umode_t mode,
|
|
struct dentry *parent, u16 *value) { return NULL; }
|
|
#endif
|
|
|
|
/*
|
|
* EDAC PCI functions
|
|
*/
|
|
#ifdef CONFIG_PCI
|
|
extern void edac_pci_do_parity_check(void);
|
|
extern void edac_pci_clear_parity_errors(void);
|
|
extern int edac_sysfs_pci_setup(void);
|
|
extern void edac_sysfs_pci_teardown(void);
|
|
extern int edac_pci_get_check_errors(void);
|
|
extern int edac_pci_get_poll_msec(void);
|
|
extern void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci);
|
|
extern void edac_pci_handle_pe(struct edac_pci_ctl_info *pci, const char *msg);
|
|
extern void edac_pci_handle_npe(struct edac_pci_ctl_info *pci,
|
|
const char *msg);
|
|
#else /* CONFIG_PCI */
|
|
/* pre-process these away */
|
|
#define edac_pci_do_parity_check()
|
|
#define edac_pci_clear_parity_errors()
|
|
#define edac_sysfs_pci_setup() (0)
|
|
#define edac_sysfs_pci_teardown()
|
|
#define edac_pci_get_check_errors()
|
|
#define edac_pci_get_poll_msec()
|
|
#define edac_pci_handle_pe()
|
|
#define edac_pci_handle_npe()
|
|
#endif /* CONFIG_PCI */
|
|
|
|
#endif /* __EDAC_MODULE_H__ */
|