Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: ipa: use ipa_table_mem() in ipa_table_reset_add()

Similar to the previous commit, pass flags rather than a memory
region ID to ipa_table_reset_add(), and there use ipa_table_mem() to
look up the memory region affected based on those flags.

Currently all eight of these table memory regions are assumed to
exist, because they all have canaries within them. Stop assuming
that will always be the case, and in ipa_table_reset_add() allow
these memory regions to be non-existent.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Alex Elder and committed by
David S. Miller
6337b147 5cb76899

+15 -16
+15 -16
drivers/net/ipa/ipa_table.c
··· 200 200 } 201 201 202 202 static void ipa_table_reset_add(struct gsi_trans *trans, bool filter, 203 - u16 first, u16 count, enum ipa_mem_id mem_id) 203 + bool hashed, bool ipv6, u16 first, u16 count) 204 204 { 205 205 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi); 206 - const struct ipa_mem *mem = ipa_mem_find(ipa, mem_id); 206 + const struct ipa_mem *mem; 207 207 dma_addr_t addr; 208 208 u32 offset; 209 209 u16 size; 210 210 211 - /* Nothing to do if the table memory region is empty */ 212 - if (!mem->size) 211 + /* Nothing to do if the memory region is doesn't exist or is empty */ 212 + mem = ipa_table_mem(ipa, filter, hashed, ipv6); 213 + if (!mem || !mem->size) 213 214 return; 214 215 215 216 if (filter) ··· 228 227 * for the IPv4 and IPv6 non-hashed and hashed filter tables. 229 228 */ 230 229 static int 231 - ipa_filter_reset_table(struct ipa *ipa, enum ipa_mem_id mem_id, bool modem) 230 + ipa_filter_reset_table(struct ipa *ipa, bool hashed, bool ipv6, bool modem) 232 231 { 233 232 u32 ep_mask = ipa->filter_map; 234 233 u32 count = hweight32(ep_mask); ··· 254 253 if (endpoint->ee_id != ee_id) 255 254 continue; 256 255 257 - ipa_table_reset_add(trans, true, endpoint_id, 1, mem_id); 256 + ipa_table_reset_add(trans, true, hashed, ipv6, endpoint_id, 1); 258 257 } 259 258 260 259 gsi_trans_commit_wait(trans); ··· 270 269 { 271 270 int ret; 272 271 273 - ret = ipa_filter_reset_table(ipa, IPA_MEM_V4_FILTER, modem); 272 + ret = ipa_filter_reset_table(ipa, false, false, modem); 274 273 if (ret) 275 274 return ret; 276 275 277 - ret = ipa_filter_reset_table(ipa, IPA_MEM_V4_FILTER_HASHED, modem); 276 + ret = ipa_filter_reset_table(ipa, true, false, modem); 278 277 if (ret) 279 278 return ret; 280 279 281 - ret = ipa_filter_reset_table(ipa, IPA_MEM_V6_FILTER, modem); 280 + ret = ipa_filter_reset_table(ipa, false, true, modem); 282 281 if (ret) 283 282 return ret; 284 - ret = ipa_filter_reset_table(ipa, IPA_MEM_V6_FILTER_HASHED, modem); 283 + ret = ipa_filter_reset_table(ipa, true, true, modem); 285 284 286 285 return ret; 287 286 } ··· 313 312 count = ipa->route_count - modem_route_count; 314 313 } 315 314 316 - ipa_table_reset_add(trans, false, first, count, IPA_MEM_V4_ROUTE); 317 - ipa_table_reset_add(trans, false, first, count, 318 - IPA_MEM_V4_ROUTE_HASHED); 315 + ipa_table_reset_add(trans, false, false, false, first, count); 316 + ipa_table_reset_add(trans, false, true, false, first, count); 319 317 320 - ipa_table_reset_add(trans, false, first, count, IPA_MEM_V6_ROUTE); 321 - ipa_table_reset_add(trans, false, first, count, 322 - IPA_MEM_V6_ROUTE_HASHED); 318 + ipa_table_reset_add(trans, false, false, true, first, count); 319 + ipa_table_reset_add(trans, false, true, true, first, count); 323 320 324 321 gsi_trans_commit_wait(trans); 325 322