分享

linux内核的内存分配函数...

 昵称3554661 2021-06-01

作用

函数 devm_kzalloc() 和kzalloc()一样都是内核内存分配函数,但是devm_kzalloc()是跟设备(device)有关的,

当设备(device)被detached或者驱动(driver)卸载(unloaded)时,内存会被自动释放。另外,也可以通过函数

devm_kfree()手动释放。

    而kzalloc()则需要手动释放(使用kfree()),但如果工程师检查不仔细,则有可能造成内存泄漏。

格式

static inline void * devm_kzalloc(struct device * dev,size_t size,gfp_t gfp)

{

    return devm_kmalloc(dev,size,gfp | __GFP_ZERO);                                                                                                                                                         

}

void * devm_kmalloc(struct device *dev, size_t size, gfp_t gfp)                                                                                                                                               

{

    struct devres *dr;

     

    dr = alloc_dr(devm_kmalloc_release, size, gfp, dev_to_node(dev));

    if (unlikely(!dr))

        return NULL;

    set_node_dbginfo(&dr->node, "devm_kzalloc_release", size);

    devres_add(dev, dr->data);

    return dr->data;

}

EXPORT_SYMBOL_GPL(devm_kmalloc);

void devm_kfree(struct device * dev,void * p)                                                                                                                                                                  

{

    int rc;

    rc = devres_destroy(dev,devm_kmalloc_release,devm_kmalloc_match,p);

    WARN_ON(RC);

}

EXPORT_SYMBOL_GPL(devm_kfree);

示例

struct s3c2440_i2c_dev {

  struct device *dev;

  void __iomem *base;

  struct i2c_msg *msg;

  u32  frequency;

  int speed_mode;

  int slave_addr;

  struct i2c_adapter  adap;

};

static int s3c2440_i2c_probe(struct platform_device *pdev)

{

  struct s3c2440_i2c_dev *i2c_dev;

  struct i2c_adapter *adap;

  struct device *dev = &pdev->dev;

  struct resource *res;

  i2c_dev = devm_kzalloc(&pdev->dev, sizeof(struct s3c2440_i2c_dev), GFP_KERNEL);

  if(!i2c_dev)

  return -ENOMEM;

 

  ...

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多