pci_enable_device 和 pcim_enable_device 有什么区别?

What's the difference between pci_enable_device and pcim_enable_device?

This book's PCI chapter 解释一下:

int pci_enable_device(struct pci_dev *dev);

然而还有:

int pcim_enable_device (struct pci_dev * pdev);

但是除了说是“Managed pci_enable_device”之外,没有任何解释。

  1. 那么这两者有什么区别呢?
  2. "managed"是什么意思?
  3. 我应该使用哪一个?

pcim_enable_device()pci_enable_device() 的托管版本。意思是如果调用了pci_enable_device(),最后还需要调用pci_disable_device()。在 pcim_enable_device() 的情况下,托管框架将为您处理禁用操作。

在新内核版本中,建议使用此类托管函数,以消除驱动程序代码中的错误处理。参见 this article to get a clue about device resource management (or devres) API. This particular function (pcim_enable_device) was introduced in this patch. If you want to read more about devres framework, see Documentation/driver-model/devres.txt

你提到的那本书("Linux Device Drivers, 3rd edition")对托管函数没有任何解释,因为它是在实现这些函数之前写的。