Add support for telling the debugfs interface the size of the GuC log dump in advance. Without that, the underlying framework keeps calling the 'show' function with larger and larger buffer allocations until it fits. That means reading the log from graphics memory many times - 16 times with the full 18MB log size. v2: Don't return error codes from size query. Report overflow in the error dump as well (review feedback from Daniele). Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211211065859.2248188-2-John.C.Harrison@Intel.com
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef INTEL_GT_DEBUGFS_H
|
|
#define INTEL_GT_DEBUGFS_H
|
|
|
|
#include <linux/file.h>
|
|
|
|
struct intel_gt;
|
|
|
|
#define __GT_DEBUGFS_ATTRIBUTE_FOPS(__name) \
|
|
static const struct file_operations __name ## _fops = { \
|
|
.owner = THIS_MODULE, \
|
|
.open = __name ## _open, \
|
|
.read = seq_read, \
|
|
.llseek = seq_lseek, \
|
|
.release = single_release, \
|
|
}
|
|
|
|
#define DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(__name) \
|
|
static int __name ## _open(struct inode *inode, struct file *file) \
|
|
{ \
|
|
return single_open(file, __name ## _show, inode->i_private); \
|
|
} \
|
|
__GT_DEBUGFS_ATTRIBUTE_FOPS(__name)
|
|
|
|
#define DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE_WITH_SIZE(__name, __size_vf) \
|
|
static int __name ## _open(struct inode *inode, struct file *file) \
|
|
{ \
|
|
return single_open_size(file, __name ## _show, inode->i_private, \
|
|
__size_vf(inode->i_private)); \
|
|
} \
|
|
__GT_DEBUGFS_ATTRIBUTE_FOPS(__name)
|
|
|
|
void intel_gt_debugfs_register(struct intel_gt *gt);
|
|
|
|
struct intel_gt_debugfs_file {
|
|
const char *name;
|
|
const struct file_operations *fops;
|
|
bool (*eval)(void *data);
|
|
};
|
|
|
|
void intel_gt_debugfs_register_files(struct dentry *root,
|
|
const struct intel_gt_debugfs_file *files,
|
|
unsigned long count, void *data);
|
|
|
|
/* functions that need to be accessed by the upper level non-gt interfaces */
|
|
int intel_gt_debugfs_reset_show(struct intel_gt *gt, u64 *val);
|
|
int intel_gt_debugfs_reset_store(struct intel_gt *gt, u64 val);
|
|
|
|
#endif /* INTEL_GT_DEBUGFS_H */
|