void mmc_add_host_debugfs(struct mmc_host *host) { struct dentry *root; root = debugfs_create_dir(mmc_hostname(host), NULL); if (IS_ERR(root)) /* Don't complain -- debugfs just isn't enabled */ return; if (!root) /* Complain -- debugfs is enabled, but it failed to * create the directory. */ goto err_root; host->debugfs_root = root; if (!debugfs_create_file("ios", S_IRUSR, root, host, &mmc_ios_fops)) goto err_node; if (!debugfs_create_file("clock", S_IRUSR | S_IWUSR, root, host, &mmc_clock_fops)) goto err_node; if (!debugfs_create_file("max_clock", S_IRUSR | S_IWUSR, root, host, &mmc_max_clock_fops)) goto err_node; #ifdef CONFIG_MMC_CLKGATE if (!debugfs_create_u32("clk_delay", (S_IRUSR | S_IWUSR), root, &host->clk_delay)) goto err_node; #endif #ifdef CONFIG_FAIL_MMC_REQUEST if (fail_request) setup_fault_attr(&fail_default_attr, fail_request); host->fail_mmc_request = fail_default_attr; if (IS_ERR(fault_create_debugfs_attr("fail_mmc_request", root, &host->fail_mmc_request))) goto err_node; #endif return; err_node: debugfs_remove_recursive(root); host->debugfs_root = NULL; err_root: dev_err(&host->class_dev, "failed to initialize debugfs\n"); }
static void ufsdbg_setup_fault_injection(struct ufs_hba *hba) { hba->debugfs_files.fail_attr = fail_default_attr; if (fail_request) setup_fault_attr(&hba->debugfs_files.fail_attr, fail_request); /* suppress dump stack everytime failure is injected */ hba->debugfs_files.fail_attr.verbose = 0; if (IS_ERR(fault_create_debugfs_attr("inject_fault", hba->debugfs_files.debugfs_root, &hba->debugfs_files.fail_attr))) dev_err(hba->dev, "%s: failed to create debugfs entry\n", __func__); }
static int __init setup_fail_iommu(char *str) { return setup_fault_attr(&fail_iommu, str); }
static int __init setup_failslab(char *str) { return setup_fault_attr(&failslab.attr, str); }
static int __init setup_fail_io_timeout(char *str) { return setup_fault_attr(&fail_io_timeout, str); }