.. | .. |
---|
38 | 38 | #define CR_ENABLE_BIT_OFFSET 0xF3F04 |
---|
39 | 39 | #define MAX_NUM_OF_DUMPS_TO_STORE (8) |
---|
40 | 40 | |
---|
41 | | -static const char *region_cr_space_str = "cr-space"; |
---|
42 | | -static const char *region_fw_health_str = "fw-health"; |
---|
| 41 | +#define REGION_CR_SPACE "cr-space" |
---|
| 42 | +#define REGION_FW_HEALTH "fw-health" |
---|
| 43 | + |
---|
| 44 | +static const char * const region_cr_space_str = REGION_CR_SPACE; |
---|
| 45 | +static const char * const region_fw_health_str = REGION_FW_HEALTH; |
---|
| 46 | + |
---|
| 47 | +static const struct devlink_region_ops region_cr_space_ops = { |
---|
| 48 | + .name = REGION_CR_SPACE, |
---|
| 49 | + .destructor = &kvfree, |
---|
| 50 | +}; |
---|
| 51 | + |
---|
| 52 | +static const struct devlink_region_ops region_fw_health_ops = { |
---|
| 53 | + .name = REGION_FW_HEALTH, |
---|
| 54 | + .destructor = &kvfree, |
---|
| 55 | +}; |
---|
43 | 56 | |
---|
44 | 57 | /* Set to true in case cr enable bit was set to true before crdump */ |
---|
45 | 58 | static bool crdump_enbale_bit_set; |
---|
.. | .. |
---|
99 | 112 | readl(cr_space + offset); |
---|
100 | 113 | |
---|
101 | 114 | err = devlink_region_snapshot_create(crdump->region_crspace, |
---|
102 | | - cr_res_size, crspace_data, |
---|
103 | | - id, &kvfree); |
---|
| 115 | + crspace_data, id); |
---|
104 | 116 | if (err) { |
---|
105 | 117 | kvfree(crspace_data); |
---|
106 | 118 | mlx4_warn(dev, "crdump: devlink create %s snapshot id %d err %d\n", |
---|
.. | .. |
---|
139 | 151 | readl(health_buf_start + offset); |
---|
140 | 152 | |
---|
141 | 153 | err = devlink_region_snapshot_create(crdump->region_fw_health, |
---|
142 | | - HEALTH_BUFFER_SIZE, |
---|
143 | | - health_data, |
---|
144 | | - id, &kvfree); |
---|
| 154 | + health_data, id); |
---|
145 | 155 | if (err) { |
---|
146 | 156 | kvfree(health_data); |
---|
147 | 157 | mlx4_warn(dev, "crdump: devlink create %s snapshot id %d err %d\n", |
---|
.. | .. |
---|
162 | 172 | struct pci_dev *pdev = dev->persist->pdev; |
---|
163 | 173 | unsigned long cr_res_size; |
---|
164 | 174 | u8 __iomem *cr_space; |
---|
| 175 | + int err; |
---|
165 | 176 | u32 id; |
---|
166 | 177 | |
---|
167 | 178 | if (!dev->caps.health_buffer_addrs) { |
---|
.. | .. |
---|
182 | 193 | return -ENODEV; |
---|
183 | 194 | } |
---|
184 | 195 | |
---|
185 | | - crdump_enable_crspace_access(dev, cr_space); |
---|
186 | | - |
---|
187 | 196 | /* Get the available snapshot ID for the dumps */ |
---|
188 | | - id = devlink_region_shapshot_id_get(devlink); |
---|
| 197 | + err = devlink_region_snapshot_id_get(devlink, &id); |
---|
| 198 | + if (err) { |
---|
| 199 | + mlx4_err(dev, "crdump: devlink get snapshot id err %d\n", err); |
---|
| 200 | + iounmap(cr_space); |
---|
| 201 | + return err; |
---|
| 202 | + } |
---|
| 203 | + |
---|
| 204 | + crdump_enable_crspace_access(dev, cr_space); |
---|
189 | 205 | |
---|
190 | 206 | /* Try to capture dumps */ |
---|
191 | 207 | mlx4_crdump_collect_crspace(dev, cr_space, id); |
---|
192 | 208 | mlx4_crdump_collect_fw_health(dev, cr_space, id); |
---|
| 209 | + |
---|
| 210 | + /* Release reference on the snapshot id */ |
---|
| 211 | + devlink_region_snapshot_id_put(devlink, id); |
---|
193 | 212 | |
---|
194 | 213 | crdump_disable_crspace_access(dev, cr_space); |
---|
195 | 214 | |
---|
.. | .. |
---|
208 | 227 | /* Create cr-space region */ |
---|
209 | 228 | crdump->region_crspace = |
---|
210 | 229 | devlink_region_create(devlink, |
---|
211 | | - region_cr_space_str, |
---|
| 230 | + ®ion_cr_space_ops, |
---|
212 | 231 | MAX_NUM_OF_DUMPS_TO_STORE, |
---|
213 | 232 | pci_resource_len(pdev, 0)); |
---|
214 | 233 | if (IS_ERR(crdump->region_crspace)) |
---|
.. | .. |
---|
219 | 238 | /* Create fw-health region */ |
---|
220 | 239 | crdump->region_fw_health = |
---|
221 | 240 | devlink_region_create(devlink, |
---|
222 | | - region_fw_health_str, |
---|
| 241 | + ®ion_fw_health_ops, |
---|
223 | 242 | MAX_NUM_OF_DUMPS_TO_STORE, |
---|
224 | 243 | HEALTH_BUFFER_SIZE); |
---|
225 | 244 | if (IS_ERR(crdump->region_fw_health)) |
---|