/* unregister_dca_provider - remove a dca provider @dca - struct created by alloc_dca_provider()  */
void unregister_dca_provider(struct dca_provider *dca, struct device *dev)
/* unregister_dca_provider - remove a dca provider @dca - struct created by alloc_dca_provider()  */
void unregister_dca_provider(struct dca_provider *dca, struct device *dev)
{
	unsigned long flags;
	struct pci_bus *pci_rc;
	struct dca_domain *domain;
	blocking_notifier_call_chain(&dca_provider_chain,
				     DCA_PROVIDER_REMOVE, NULL);
	spin_lock_irqsave(&dca_lock, flags);
	list_del(&dca->node);
	pci_rc = dca_pci_rc_from_dev(dev);
	domain = dca_find_domain(pci_rc);
	if (list_empty(&domain->dca_providers))
		dca_free_domain(domain);
	spin_unlock_irqrestore(&dca_lock, flags);
	dca_sysfs_remove_provider(dca);
}