Skip to content
Snippets Groups Projects
Select Git revision
  • 3e3aaf649416988ca8be4ad2c52dc24d8be7b46e
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

phy.h

Blame
    • Russell King's avatar
      3e3aaf64
      phy: fix mdiobus module safety · 3e3aaf64
      Russell King authored
      
      Re-implement the mdiobus module refcounting to ensure that we actually
      ensure that the mdiobus module code does not go away while we might call
      into it.
      
      The old scheme using bus->dev.driver was buggy, because bus->dev is a
      class device which never has a struct device_driver associated with it,
      and hence the associated code trying to obtain a refcount did nothing
      useful.
      
      Instead, take the approach that other subsystems do: pass the module
      when calling mdiobus_register(), and record that in the mii_bus struct.
      When we need to increment the module use count in the phy code, use
      this stored pointer.  When the phy is deteched, drop the module
      refcount, remembering that the phy device might go away at that point.
      
      This doesn't stop the mii_bus going away while there are in-use phys -
      it merely stops the underlying code vanishing.
      
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3e3aaf64
      History
      phy: fix mdiobus module safety
      Russell King authored
      
      Re-implement the mdiobus module refcounting to ensure that we actually
      ensure that the mdiobus module code does not go away while we might call
      into it.
      
      The old scheme using bus->dev.driver was buggy, because bus->dev is a
      class device which never has a struct device_driver associated with it,
      and hence the associated code trying to obtain a refcount did nothing
      useful.
      
      Instead, take the approach that other subsystems do: pass the module
      when calling mdiobus_register(), and record that in the mii_bus struct.
      When we need to increment the module use count in the phy code, use
      this stored pointer.  When the phy is deteched, drop the module
      refcount, remembering that the phy device might go away at that point.
      
      This doesn't stop the mii_bus going away while there are in-use phys -
      it merely stops the underlying code vanishing.
      
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    pvr_debugfs.c 1.29 KiB
    // SPDX-License-Identifier: GPL-2.0-only OR MIT
    /* Copyright (c) 2023 Imagination Technologies Ltd. */
    
    #include "pvr_debugfs.h"
    
    #include "pvr_device.h"
    #include "pvr_fw_trace.h"
    #include "pvr_params.h"
    
    #include <linux/dcache.h>
    #include <linux/debugfs.h>
    #include <linux/err.h>
    #include <linux/kernel.h>
    #include <linux/types.h>
    
    #include <drm/drm_device.h>
    #include <drm/drm_file.h>
    #include <drm/drm_print.h>
    
    static const struct pvr_debugfs_entry pvr_debugfs_entries[] = {
    	{"pvr_params", pvr_params_debugfs_init},
    	{"pvr_fw", pvr_fw_trace_debugfs_init},
    };
    
    void
    pvr_debugfs_init(struct drm_minor *minor)
    {
    	struct drm_device *drm_dev = minor->dev;
    	struct pvr_device *pvr_dev = to_pvr_device(drm_dev);
    	struct dentry *root = minor->debugfs_root;
    	size_t i;
    
    	for (i = 0; i < ARRAY_SIZE(pvr_debugfs_entries); ++i) {
    		const struct pvr_debugfs_entry *entry = &pvr_debugfs_entries[i];
    		struct dentry *dir;
    
    		dir = debugfs_create_dir(entry->name, root);
    		if (IS_ERR(dir)) {
    			drm_warn(drm_dev,
    				 "failed to create debugfs dir '%s' (err=%d)",
    				 entry->name, (int)PTR_ERR(dir));
    			continue;
    		}
    
    		entry->init(pvr_dev, dir);
    	}
    }
    
    /*
     * Since all entries are created under &drm_minor->debugfs_root, there's no
     * need for a pvr_debugfs_fini() as DRM will clean up everything under its root
     * automatically.
     */