- Cleanup the firmware node for the new IRQ MSI domain properly, to
avoid leaking memory -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmPWd70ACgkQEsHwGGHe VUpTgxAAjKo7kjhyE9PjKA8tJ5pv6I/21tieu/JAmRyb8AVkhi21elXJaRoEPW4k 2TuSd0WMxZeoRJ1N366HcGPZcsldKN45v3xXEv1e3XSL6ZTAIFsYvwni6adwVocS ztnZBrMuHf1KZW/6ES956qGmWsum0rYcU2sr0kvnS9ihPiXJsbeLfNF1VXPwaH2y DTnTxgl/QtuipSQYOUvLSk1XBduvE+Wx8kE1S6TrdlWE9qsD/Jn1Jn7btaLQeHfs 27AXTNGYnVHeRZSVy6d38dIwU4Gh6LcLMFfTtNENIqTVCUfc/QcAb/gItDF0NvIr fgKbkdmI7jc0rIfLGlBUM8WZ0OaxopFwvchVywjcogDpCfLvJbgR7JplEKTfltgz 62IjvTF6vXUCcjySwu/C48EE2G7CWL0FtIcJofZsI0yTeHESkwFf1r5eOjnTV2ao M2QYGeToRtk7z9vb+pa0ZttD55TKXQKZDBv+lBRKLTy8SeIzlExJswIAuGTpWuKR ntwrdtekyM2HNir/l9ad1X2mjVblivEEv1hLMpsxPsthigWXDr+PZtQIxHCao8wj aKY4bI0F1AXByuKhQAwX/RVHUmB+AGrzJ/M5Fdj+ealQ6Nk+xCrPyTX2qDmveiSF NlQZpGCxV+gI/8q9YU4coJm1AioT8TSFsMxaufGZCreqqaWBXl0= =qrIZ -----END PGP SIGNATURE----- Merge tag 'irq_urgent_for_v6.2_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull irq fix from Borislav Petkov: - Cleanup the firmware node for the new IRQ MSI domain properly, to avoid leaking memory * tag 'irq_urgent_for_v6.2_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq/msi: Free the fwnode created by msi_create_device_irq_domain()
This commit is contained in:
Коммит
ab072681ea
|
@ -114,7 +114,7 @@ void irq_domain_free_fwnode(struct fwnode_handle *fwnode)
|
|||
{
|
||||
struct irqchip_fwid *fwid;
|
||||
|
||||
if (WARN_ON(!is_fwnode_irqchip(fwnode)))
|
||||
if (!fwnode || WARN_ON(!is_fwnode_irqchip(fwnode)))
|
||||
return;
|
||||
|
||||
fwid = container_of(fwnode, struct irqchip_fwid, fwnode);
|
||||
|
|
|
@ -1000,7 +1000,7 @@ bool msi_create_device_irq_domain(struct device *dev, unsigned int domid,
|
|||
fail:
|
||||
msi_unlock_descs(dev);
|
||||
free_fwnode:
|
||||
kfree(fwnode);
|
||||
irq_domain_free_fwnode(fwnode);
|
||||
free_bundle:
|
||||
kfree(bundle);
|
||||
return false;
|
||||
|
@ -1013,6 +1013,7 @@ free_bundle:
|
|||
*/
|
||||
void msi_remove_device_irq_domain(struct device *dev, unsigned int domid)
|
||||
{
|
||||
struct fwnode_handle *fwnode = NULL;
|
||||
struct msi_domain_info *info;
|
||||
struct irq_domain *domain;
|
||||
|
||||
|
@ -1025,7 +1026,10 @@ void msi_remove_device_irq_domain(struct device *dev, unsigned int domid)
|
|||
|
||||
dev->msi.data->__domains[domid].domain = NULL;
|
||||
info = domain->host_data;
|
||||
if (irq_domain_is_msi_device(domain))
|
||||
fwnode = domain->fwnode;
|
||||
irq_domain_remove(domain);
|
||||
irq_domain_free_fwnode(fwnode);
|
||||
kfree(container_of(info, struct msi_domain_template, info));
|
||||
|
||||
unlock:
|
||||
|
|
Загрузка…
Ссылка в новой задаче