Skip to content

Commit e81f1e0

Browse files
committed
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 <[email protected]>
2 parents 1e997d0 + 163f69a commit e81f1e0

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

drivers/net/wwan/iosm/iosm_ipc_debugfs.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
void ipc_debugfs_init(struct iosm_imem *ipc_imem)
1414
{
15-
struct dentry *debugfs_pdev = wwan_get_debugfs_dir(ipc_imem->dev);
15+
ipc_imem->debugfs_wwan_dir = wwan_get_debugfs_dir(ipc_imem->dev);
1616

1717
ipc_imem->debugfs_dir = debugfs_create_dir(KBUILD_MODNAME,
18-
debugfs_pdev);
18+
ipc_imem->debugfs_wwan_dir);
1919

2020
ipc_imem->trace = ipc_trace_init(ipc_imem);
2121
if (!ipc_imem->trace)
@@ -26,4 +26,5 @@ void ipc_debugfs_deinit(struct iosm_imem *ipc_imem)
2626
{
2727
ipc_trace_deinit(ipc_imem->trace);
2828
debugfs_remove_recursive(ipc_imem->debugfs_dir);
29+
wwan_put_debugfs_dir(ipc_imem->debugfs_wwan_dir);
2930
}

drivers/net/wwan/iosm/iosm_ipc_imem.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ enum ipc_phase {
341341
* @ev_mux_net_transmit_pending:0 means inform the IPC tasklet to pass
342342
* @reset_det_n: Reset detect flag
343343
* @pcie_wake_n: Pcie wake flag
344+
* @debugfs_wwan_dir: WWAN Debug FS directory entry
344345
* @debugfs_dir: Debug FS directory for driver-specific entries
345346
*/
346347
struct iosm_imem {
@@ -384,6 +385,7 @@ struct iosm_imem {
384385
reset_det_n:1,
385386
pcie_wake_n:1;
386387
#ifdef CONFIG_WWAN_DEBUGFS
388+
struct dentry *debugfs_wwan_dir;
387389
struct dentry *debugfs_dir;
388390
#endif
389391
};

drivers/net/wwan/wwan_core.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,42 @@ struct dentry *wwan_get_debugfs_dir(struct device *parent)
160160
return wwandev->debugfs_dir;
161161
}
162162
EXPORT_SYMBOL_GPL(wwan_get_debugfs_dir);
163+
164+
static int wwan_dev_debugfs_match(struct device *dev, const void *dir)
165+
{
166+
struct wwan_device *wwandev;
167+
168+
if (dev->type != &wwan_dev_type)
169+
return 0;
170+
171+
wwandev = to_wwan_dev(dev);
172+
173+
return wwandev->debugfs_dir == dir;
174+
}
175+
176+
static struct wwan_device *wwan_dev_get_by_debugfs(struct dentry *dir)
177+
{
178+
struct device *dev;
179+
180+
dev = class_find_device(wwan_class, NULL, dir, wwan_dev_debugfs_match);
181+
if (!dev)
182+
return ERR_PTR(-ENODEV);
183+
184+
return to_wwan_dev(dev);
185+
}
186+
187+
void wwan_put_debugfs_dir(struct dentry *dir)
188+
{
189+
struct wwan_device *wwandev = wwan_dev_get_by_debugfs(dir);
190+
191+
if (WARN_ON(IS_ERR(wwandev)))
192+
return;
193+
194+
/* wwan_dev_get_by_debugfs() also got a reference */
195+
put_device(&wwandev->dev);
196+
put_device(&wwandev->dev);
197+
}
198+
EXPORT_SYMBOL_GPL(wwan_put_debugfs_dir);
163199
#endif
164200

165201
/* This function allocates and registers a new WWAN device OR if a WWAN device

include/linux/wwan.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,13 @@ void wwan_unregister_ops(struct device *parent);
174174

175175
#ifdef CONFIG_WWAN_DEBUGFS
176176
struct dentry *wwan_get_debugfs_dir(struct device *parent);
177+
void wwan_put_debugfs_dir(struct dentry *dir);
177178
#else
178179
static inline struct dentry *wwan_get_debugfs_dir(struct device *parent)
179180
{
180181
return ERR_PTR(-ENODEV);
181182
}
183+
static inline void wwan_put_debugfs_dir(struct dentry *dir) {}
182184
#endif
183185

184186
#endif /* __WWAN_H */

0 commit comments

Comments
 (0)