mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-29 04:45:05 +00:00
liquidio: free resources during shutdown
This patch fixes the issue of proper freeing of queue memory resources during free device. It also has fix for correct pcie error reporting. Signed-off-by: Derek Chickles <derek.chickles@caviumnetworks.com> Signed-off-by: Satanand Burla <satananda.burla@caviumnetworks.com> Signed-off-by: Felix Manlunas <felix.manlunas@caviumnetworks.com> Signed-off-by: Raghu Vatsavayi <raghu.vatsavayi@caviumnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3dcef2ca02
commit
1e0d30fe21
@ -64,9 +64,9 @@ void lio_cn6xxx_enable_error_reporting(struct octeon_device *oct)
|
||||
u32 val;
|
||||
|
||||
pci_read_config_dword(oct->pci_dev, CN6XXX_PCIE_DEVCTL, &val);
|
||||
if (val & 0x000f0000) {
|
||||
if (val & 0x000c0000) {
|
||||
dev_err(&oct->pci_dev->dev, "PCI-E Link error detected: 0x%08x\n",
|
||||
val & 0x000f0000);
|
||||
val & 0x000c0000);
|
||||
}
|
||||
|
||||
val |= 0xf; /* Enable Link error reporting */
|
||||
|
@ -3957,6 +3957,7 @@ static int octeon_device_init(struct octeon_device *octeon_dev)
|
||||
/* Release any previously allocated queues */
|
||||
for (j = 0; j < octeon_dev->num_oqs; j++)
|
||||
octeon_delete_droq(octeon_dev, j);
|
||||
return 1;
|
||||
}
|
||||
|
||||
atomic_set(&octeon_dev->status, OCT_DEV_DROQ_INIT_DONE);
|
||||
@ -3979,7 +3980,8 @@ static int octeon_device_init(struct octeon_device *octeon_dev)
|
||||
|
||||
/* Setup the interrupt handler and record the INT SUM register address
|
||||
*/
|
||||
octeon_setup_interrupt(octeon_dev);
|
||||
if (octeon_setup_interrupt(octeon_dev))
|
||||
return 1;
|
||||
|
||||
/* Enable Octeon device interrupts */
|
||||
octeon_dev->fn_list.enable_interrupt(octeon_dev->chip);
|
||||
|
@ -312,6 +312,9 @@ static u64 cvmx_bootmem_phy_named_block_find(struct octeon_device *oct,
|
||||
if (name && named_size) {
|
||||
char *name_tmp =
|
||||
kmalloc(name_length + 1, GFP_KERNEL);
|
||||
if (!name_tmp)
|
||||
break;
|
||||
|
||||
CVMX_BOOTMEM_NAMED_GET_NAME(oct, named_addr,
|
||||
name_tmp,
|
||||
name_length);
|
||||
|
@ -644,16 +644,16 @@ int octeon_download_firmware(struct octeon_device *oct, const u8 *data,
|
||||
|
||||
void octeon_free_device_mem(struct octeon_device *oct)
|
||||
{
|
||||
u32 i;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) {
|
||||
/* could check mask as well */
|
||||
vfree(oct->droq[i]);
|
||||
if (oct->io_qmask.oq & (1ULL << i))
|
||||
vfree(oct->droq[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) {
|
||||
/* could check mask as well */
|
||||
vfree(oct->instr_queue[i]);
|
||||
if (oct->io_qmask.iq & (1ULL << i))
|
||||
vfree(oct->instr_queue[i]);
|
||||
}
|
||||
|
||||
i = oct->octeon_id;
|
||||
|
Loading…
Reference in New Issue
Block a user