在平台驱动程序的探测例程中,我看到专用设备结构是通过devm_kzalloc()
分配的。在通过platform_set_drvdata()
设置驱动程序数据之前,有一些错误情况会在不释放分配的专用设备结构的情况下返回。我找不到释放该结构的地方。您能指出结构在哪里被释放。以下是Linux内核源代码(v5.0)中的示例平台驱动程序,其中ep
分配失败时不会释放pci
。
static int __init exynos_pcie_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct dw_pcie *pci;
struct exynos_pcie *ep;
struct device_node *np = dev->of_node;
int ret;
ep = devm_kzalloc(dev, sizeof(*ep), GFP_KERNEL);
if (!ep)
return -ENOMEM;
pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL);
if (!pci)
return -ENOMEM;
...
...
}