mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 05:41:55 +00:00
scsi: mpt3sas: Suppress a warning in debug kernel
The mpt3sas_ctl_exit() should be called after communication with the controller stops but currently it may cause false warnings about not released memory. Fix this by letting mpt3sas_ctl_exit() handle misc driver release per driver and release DMA in mpt3sas_ctl_release() per ioc. Signed-off-by: Tomas Henzl <thenzl@redhat.com> Link: https://lore.kernel.org/r/20231019153706.7967-1-thenzl@redhat.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
4f6dd2a4bf
commit
6a965ee189
@ -1981,6 +1981,7 @@ extern const struct attribute_group *mpt3sas_host_groups[];
|
||||
extern const struct attribute_group *mpt3sas_dev_groups[];
|
||||
void mpt3sas_ctl_init(ushort hbas_to_enumerate);
|
||||
void mpt3sas_ctl_exit(ushort hbas_to_enumerate);
|
||||
void mpt3sas_ctl_release(struct MPT3SAS_ADAPTER *ioc);
|
||||
u8 mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
|
||||
u32 reply);
|
||||
void mpt3sas_ctl_pre_reset_handler(struct MPT3SAS_ADAPTER *ioc);
|
||||
|
@ -4156,6 +4156,30 @@ mpt3sas_ctl_init(ushort hbas_to_enumerate)
|
||||
init_waitqueue_head(&ctl_poll_wait);
|
||||
}
|
||||
|
||||
/**
|
||||
* mpt3sas_ctl_release - release dma for ctl
|
||||
* @ioc: per adapter object
|
||||
*/
|
||||
void
|
||||
mpt3sas_ctl_release(struct MPT3SAS_ADAPTER *ioc)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* free memory associated to diag buffers */
|
||||
for (i = 0; i < MPI2_DIAG_BUF_TYPE_COUNT; i++) {
|
||||
if (!ioc->diag_buffer[i])
|
||||
continue;
|
||||
dma_free_coherent(&ioc->pdev->dev,
|
||||
ioc->diag_buffer_sz[i],
|
||||
ioc->diag_buffer[i],
|
||||
ioc->diag_buffer_dma[i]);
|
||||
ioc->diag_buffer[i] = NULL;
|
||||
ioc->diag_buffer_status[i] = 0;
|
||||
}
|
||||
|
||||
kfree(ioc->event_log);
|
||||
}
|
||||
|
||||
/**
|
||||
* mpt3sas_ctl_exit - exit point for ctl
|
||||
* @hbas_to_enumerate: ?
|
||||
@ -4163,25 +4187,7 @@ mpt3sas_ctl_init(ushort hbas_to_enumerate)
|
||||
void
|
||||
mpt3sas_ctl_exit(ushort hbas_to_enumerate)
|
||||
{
|
||||
struct MPT3SAS_ADAPTER *ioc;
|
||||
int i;
|
||||
|
||||
list_for_each_entry(ioc, &mpt3sas_ioc_list, list) {
|
||||
|
||||
/* free memory associated to diag buffers */
|
||||
for (i = 0; i < MPI2_DIAG_BUF_TYPE_COUNT; i++) {
|
||||
if (!ioc->diag_buffer[i])
|
||||
continue;
|
||||
dma_free_coherent(&ioc->pdev->dev,
|
||||
ioc->diag_buffer_sz[i],
|
||||
ioc->diag_buffer[i],
|
||||
ioc->diag_buffer_dma[i]);
|
||||
ioc->diag_buffer[i] = NULL;
|
||||
ioc->diag_buffer_status[i] = 0;
|
||||
}
|
||||
|
||||
kfree(ioc->event_log);
|
||||
}
|
||||
if (hbas_to_enumerate != 1)
|
||||
misc_deregister(&ctl_dev);
|
||||
if (hbas_to_enumerate != 2)
|
||||
|
@ -11331,6 +11331,7 @@ static void scsih_remove(struct pci_dev *pdev)
|
||||
}
|
||||
|
||||
mpt3sas_base_detach(ioc);
|
||||
mpt3sas_ctl_release(ioc);
|
||||
spin_lock(&gioc_lock);
|
||||
list_del(&ioc->list);
|
||||
spin_unlock(&gioc_lock);
|
||||
|
Loading…
Reference in New Issue
Block a user