mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
Merge branch 'wwan-debugfs'
M Chetan Kumar says: ==================== net: wwan: debugfs dev reference not dropped This patch series contains WWAN subsystem & IOSM Driver changes to drop dev reference obtained as part of wwan debugfs dir entry retrieval. PATCH1: A new debugfs interface is introduced in wwan subsystem so that wwan driver can drop the obtained dev reference post debugfs use. PATCH2: IOSM Driver uses new debugfs interface to drop dev reference. Please refer to commit messages for details. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
e81f1e0de8
4 changed files with 43 additions and 2 deletions
|
@ -12,10 +12,10 @@
|
|||
|
||||
void ipc_debugfs_init(struct iosm_imem *ipc_imem)
|
||||
{
|
||||
struct dentry *debugfs_pdev = wwan_get_debugfs_dir(ipc_imem->dev);
|
||||
ipc_imem->debugfs_wwan_dir = wwan_get_debugfs_dir(ipc_imem->dev);
|
||||
|
||||
ipc_imem->debugfs_dir = debugfs_create_dir(KBUILD_MODNAME,
|
||||
debugfs_pdev);
|
||||
ipc_imem->debugfs_wwan_dir);
|
||||
|
||||
ipc_imem->trace = ipc_trace_init(ipc_imem);
|
||||
if (!ipc_imem->trace)
|
||||
|
@ -26,4 +26,5 @@ void ipc_debugfs_deinit(struct iosm_imem *ipc_imem)
|
|||
{
|
||||
ipc_trace_deinit(ipc_imem->trace);
|
||||
debugfs_remove_recursive(ipc_imem->debugfs_dir);
|
||||
wwan_put_debugfs_dir(ipc_imem->debugfs_wwan_dir);
|
||||
}
|
||||
|
|
|
@ -341,6 +341,7 @@ enum ipc_phase {
|
|||
* @ev_mux_net_transmit_pending:0 means inform the IPC tasklet to pass
|
||||
* @reset_det_n: Reset detect flag
|
||||
* @pcie_wake_n: Pcie wake flag
|
||||
* @debugfs_wwan_dir: WWAN Debug FS directory entry
|
||||
* @debugfs_dir: Debug FS directory for driver-specific entries
|
||||
*/
|
||||
struct iosm_imem {
|
||||
|
@ -384,6 +385,7 @@ struct iosm_imem {
|
|||
reset_det_n:1,
|
||||
pcie_wake_n:1;
|
||||
#ifdef CONFIG_WWAN_DEBUGFS
|
||||
struct dentry *debugfs_wwan_dir;
|
||||
struct dentry *debugfs_dir;
|
||||
#endif
|
||||
};
|
||||
|
|
|
@ -160,6 +160,42 @@ struct dentry *wwan_get_debugfs_dir(struct device *parent)
|
|||
return wwandev->debugfs_dir;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wwan_get_debugfs_dir);
|
||||
|
||||
static int wwan_dev_debugfs_match(struct device *dev, const void *dir)
|
||||
{
|
||||
struct wwan_device *wwandev;
|
||||
|
||||
if (dev->type != &wwan_dev_type)
|
||||
return 0;
|
||||
|
||||
wwandev = to_wwan_dev(dev);
|
||||
|
||||
return wwandev->debugfs_dir == dir;
|
||||
}
|
||||
|
||||
static struct wwan_device *wwan_dev_get_by_debugfs(struct dentry *dir)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = class_find_device(wwan_class, NULL, dir, wwan_dev_debugfs_match);
|
||||
if (!dev)
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
||||
return to_wwan_dev(dev);
|
||||
}
|
||||
|
||||
void wwan_put_debugfs_dir(struct dentry *dir)
|
||||
{
|
||||
struct wwan_device *wwandev = wwan_dev_get_by_debugfs(dir);
|
||||
|
||||
if (WARN_ON(IS_ERR(wwandev)))
|
||||
return;
|
||||
|
||||
/* wwan_dev_get_by_debugfs() also got a reference */
|
||||
put_device(&wwandev->dev);
|
||||
put_device(&wwandev->dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wwan_put_debugfs_dir);
|
||||
#endif
|
||||
|
||||
/* This function allocates and registers a new WWAN device OR if a WWAN device
|
||||
|
|
|
@ -174,11 +174,13 @@ void wwan_unregister_ops(struct device *parent);
|
|||
|
||||
#ifdef CONFIG_WWAN_DEBUGFS
|
||||
struct dentry *wwan_get_debugfs_dir(struct device *parent);
|
||||
void wwan_put_debugfs_dir(struct dentry *dir);
|
||||
#else
|
||||
static inline struct dentry *wwan_get_debugfs_dir(struct device *parent)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
static inline void wwan_put_debugfs_dir(struct dentry *dir) {}
|
||||
#endif
|
||||
|
||||
#endif /* __WWAN_H */
|
||||
|
|
Loading…
Add table
Reference in a new issue