devm_kzalloc割り当てられたメモリを自動的に解放されたときに、ドライバのアンインストール

内部のGPIO-ボタンhotplug.cで、このコード:

buttons = devm_kzalloc(dev, pdata->nbuttons * sizeof(struct gpio_keys_button),
           GFP_KERNEL);
if (!buttons) {
    dev_err(dev, "no memory for button data\n");
    return -ENOMEM;
}
memcpy(buttons, pdata->buttons, pdata->nbuttons * sizeof(struct gpio_keys_button));

bdev = devm_kzalloc(dev, sizeof(struct gpio_keys_button_dev) +
           pdata->nbuttons * sizeof(struct gpio_keys_button_data),
           GFP_KERNEL);
if (!bdev) {
    dev_err(dev, "no memory for private data\n");
    return -ENOMEM;
}

BDEVメモリの割り当てに失敗した場合、関数は直接返し、メモリ空間へのボタンポインタは、それをリークしたメモリのだろうか?答えはノーです。

devm_kzallocアプリケーションボタンがあるので、インタフェース・アプリケーションメモリが自動的にドライバのアンインストールをリリースしています。この関数は、返されたが失敗した場合、ドライバはスペースを指しているボタンが解放されます、アンインストールされます、gpio_keys_button_probeです。そこでここでは、ロジックは、メモリリークを起こしていません。

おすすめ

転載: www.cnblogs.com/gimo/p/11784615.html