xref: /linux/drivers/infiniband/core/cache.c (revision 1f2367a39f17bd553a75e179a747f9b257bc9478)
1 /*
2  * Copyright (c) 2004 Topspin Communications.  All rights reserved.
3  * Copyright (c) 2005 Intel Corporation. All rights reserved.
4  * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
5  * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
6  *
7  * This software is available to you under a choice of one of two
8  * licenses.  You may choose to be licensed under the terms of the GNU
9  * General Public License (GPL) Version 2, available from the file
10  * COPYING in the main directory of this source tree, or the
11  * OpenIB.org BSD license below:
12  *
13  *     Redistribution and use in source and binary forms, with or
14  *     without modification, are permitted provided that the following
15  *     conditions are met:
16  *
17  *      - Redistributions of source code must retain the above
18  *        copyright notice, this list of conditions and the following
19  *        disclaimer.
20  *
21  *      - Redistributions in binary form must reproduce the above
22  *        copyright notice, this list of conditions and the following
23  *        disclaimer in the documentation and/or other materials
24  *        provided with the distribution.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33  * SOFTWARE.
34  */
35 
36 #include <linux/module.h>
37 #include <linux/errno.h>
38 #include <linux/slab.h>
39 #include <linux/workqueue.h>
40 #include <linux/netdevice.h>
41 #include <net/addrconf.h>
42 
43 #include <rdma/ib_cache.h>
44 
45 #include "core_priv.h"
46 
47 struct ib_pkey_cache {
48 	int             table_len;
49 	u16             table[0];
50 };
51 
52 struct ib_update_work {
53 	struct work_struct work;
54 	struct ib_device  *device;
55 	u8                 port_num;
56 	bool		   enforce_security;
57 };
58 
59 union ib_gid zgid;
60 EXPORT_SYMBOL(zgid);
61 
62 enum gid_attr_find_mask {
63 	GID_ATTR_FIND_MASK_GID          = 1UL << 0,
64 	GID_ATTR_FIND_MASK_NETDEV	= 1UL << 1,
65 	GID_ATTR_FIND_MASK_DEFAULT	= 1UL << 2,
66 	GID_ATTR_FIND_MASK_GID_TYPE	= 1UL << 3,
67 };
68 
69 enum gid_table_entry_state {
70 	GID_TABLE_ENTRY_INVALID		= 1,
71 	GID_TABLE_ENTRY_VALID		= 2,
72 	/*
73 	 * Indicates that entry is pending to be removed, there may
74 	 * be active users of this GID entry.
75 	 * When last user of the GID entry releases reference to it,
76 	 * GID entry is detached from the table.
77 	 */
78 	GID_TABLE_ENTRY_PENDING_DEL	= 3,
79 };
80 
81 struct ib_gid_table_entry {
82 	struct kref			kref;
83 	struct work_struct		del_work;
84 	struct ib_gid_attr		attr;
85 	void				*context;
86 	enum gid_table_entry_state	state;
87 };
88 
89 struct ib_gid_table {
90 	int				sz;
91 	/* In RoCE, adding a GID to the table requires:
92 	 * (a) Find if this GID is already exists.
93 	 * (b) Find a free space.
94 	 * (c) Write the new GID
95 	 *
96 	 * Delete requires different set of operations:
97 	 * (a) Find the GID
98 	 * (b) Delete it.
99 	 *
100 	 **/
101 	/* Any writer to data_vec must hold this lock and the write side of
102 	 * rwlock. Readers must hold only rwlock. All writers must be in a
103 	 * sleepable context.
104 	 */
105 	struct mutex			lock;
106 	/* rwlock protects data_vec[ix]->state and entry pointer.
107 	 */
108 	rwlock_t			rwlock;
109 	struct ib_gid_table_entry	**data_vec;
110 	/* bit field, each bit indicates the index of default GID */
111 	u32				default_gid_indices;
112 };
113 
114 static void dispatch_gid_change_event(struct ib_device *ib_dev, u8 port)
115 {
116 	struct ib_event event;
117 
118 	event.device		= ib_dev;
119 	event.element.port_num	= port;
120 	event.event		= IB_EVENT_GID_CHANGE;
121 
122 	ib_dispatch_event(&event);
123 }
124 
125 static const char * const gid_type_str[] = {
126 	[IB_GID_TYPE_IB]	= "IB/RoCE v1",
127 	[IB_GID_TYPE_ROCE_UDP_ENCAP]	= "RoCE v2",
128 };
129 
130 const char *ib_cache_gid_type_str(enum ib_gid_type gid_type)
131 {
132 	if (gid_type < ARRAY_SIZE(gid_type_str) && gid_type_str[gid_type])
133 		return gid_type_str[gid_type];
134 
135 	return "Invalid GID type";
136 }
137 EXPORT_SYMBOL(ib_cache_gid_type_str);
138 
139 /** rdma_is_zero_gid - Check if given GID is zero or not.
140  * @gid:	GID to check
141  * Returns true if given GID is zero, returns false otherwise.
142  */
143 bool rdma_is_zero_gid(const union ib_gid *gid)
144 {
145 	return !memcmp(gid, &zgid, sizeof(*gid));
146 }
147 EXPORT_SYMBOL(rdma_is_zero_gid);
148 
149 /** is_gid_index_default - Check if a given index belongs to
150  * reserved default GIDs or not.
151  * @table:	GID table pointer
152  * @index:	Index to check in GID table
153  * Returns true if index is one of the reserved default GID index otherwise
154  * returns false.
155  */
156 static bool is_gid_index_default(const struct ib_gid_table *table,
157 				 unsigned int index)
158 {
159 	return index < 32 && (BIT(index) & table->default_gid_indices);
160 }
161 
162 int ib_cache_gid_parse_type_str(const char *buf)
163 {
164 	unsigned int i;
165 	size_t len;
166 	int err = -EINVAL;
167 
168 	len = strlen(buf);
169 	if (len == 0)
170 		return -EINVAL;
171 
172 	if (buf[len - 1] == '\n')
173 		len--;
174 
175 	for (i = 0; i < ARRAY_SIZE(gid_type_str); ++i)
176 		if (gid_type_str[i] && !strncmp(buf, gid_type_str[i], len) &&
177 		    len == strlen(gid_type_str[i])) {
178 			err = i;
179 			break;
180 		}
181 
182 	return err;
183 }
184 EXPORT_SYMBOL(ib_cache_gid_parse_type_str);
185 
186 static struct ib_gid_table *rdma_gid_table(struct ib_device *device, u8 port)
187 {
188 	return device->port_data[port].cache.gid;
189 }
190 
191 static bool is_gid_entry_free(const struct ib_gid_table_entry *entry)
192 {
193 	return !entry;
194 }
195 
196 static bool is_gid_entry_valid(const struct ib_gid_table_entry *entry)
197 {
198 	return entry && entry->state == GID_TABLE_ENTRY_VALID;
199 }
200 
201 static void schedule_free_gid(struct kref *kref)
202 {
203 	struct ib_gid_table_entry *entry =
204 			container_of(kref, struct ib_gid_table_entry, kref);
205 
206 	queue_work(ib_wq, &entry->del_work);
207 }
208 
209 static void free_gid_entry_locked(struct ib_gid_table_entry *entry)
210 {
211 	struct ib_device *device = entry->attr.device;
212 	u8 port_num = entry->attr.port_num;
213 	struct ib_gid_table *table = rdma_gid_table(device, port_num);
214 
215 	dev_dbg(&device->dev, "%s port=%d index=%d gid %pI6\n", __func__,
216 		port_num, entry->attr.index, entry->attr.gid.raw);
217 
218 	write_lock_irq(&table->rwlock);
219 
220 	/*
221 	 * The only way to avoid overwriting NULL in table is
222 	 * by comparing if it is same entry in table or not!
223 	 * If new entry in table is added by the time we free here,
224 	 * don't overwrite the table entry.
225 	 */
226 	if (entry == table->data_vec[entry->attr.index])
227 		table->data_vec[entry->attr.index] = NULL;
228 	/* Now this index is ready to be allocated */
229 	write_unlock_irq(&table->rwlock);
230 
231 	if (entry->attr.ndev)
232 		dev_put(entry->attr.ndev);
233 	kfree(entry);
234 }
235 
236 static void free_gid_entry(struct kref *kref)
237 {
238 	struct ib_gid_table_entry *entry =
239 			container_of(kref, struct ib_gid_table_entry, kref);
240 
241 	free_gid_entry_locked(entry);
242 }
243 
244 /**
245  * free_gid_work - Release reference to the GID entry
246  * @work: Work structure to refer to GID entry which needs to be
247  * deleted.
248  *
249  * free_gid_work() frees the entry from the HCA's hardware table
250  * if provider supports it. It releases reference to netdevice.
251  */
252 static void free_gid_work(struct work_struct *work)
253 {
254 	struct ib_gid_table_entry *entry =
255 		container_of(work, struct ib_gid_table_entry, del_work);
256 	struct ib_device *device = entry->attr.device;
257 	u8 port_num = entry->attr.port_num;
258 	struct ib_gid_table *table = rdma_gid_table(device, port_num);
259 
260 	mutex_lock(&table->lock);
261 	free_gid_entry_locked(entry);
262 	mutex_unlock(&table->lock);
263 }
264 
265 static struct ib_gid_table_entry *
266 alloc_gid_entry(const struct ib_gid_attr *attr)
267 {
268 	struct ib_gid_table_entry *entry;
269 
270 	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
271 	if (!entry)
272 		return NULL;
273 	kref_init(&entry->kref);
274 	memcpy(&entry->attr, attr, sizeof(*attr));
275 	if (entry->attr.ndev)
276 		dev_hold(entry->attr.ndev);
277 	INIT_WORK(&entry->del_work, free_gid_work);
278 	entry->state = GID_TABLE_ENTRY_INVALID;
279 	return entry;
280 }
281 
282 static void store_gid_entry(struct ib_gid_table *table,
283 			    struct ib_gid_table_entry *entry)
284 {
285 	entry->state = GID_TABLE_ENTRY_VALID;
286 
287 	dev_dbg(&entry->attr.device->dev, "%s port=%d index=%d gid %pI6\n",
288 		__func__, entry->attr.port_num, entry->attr.index,
289 		entry->attr.gid.raw);
290 
291 	lockdep_assert_held(&table->lock);
292 	write_lock_irq(&table->rwlock);
293 	table->data_vec[entry->attr.index] = entry;
294 	write_unlock_irq(&table->rwlock);
295 }
296 
297 static void get_gid_entry(struct ib_gid_table_entry *entry)
298 {
299 	kref_get(&entry->kref);
300 }
301 
302 static void put_gid_entry(struct ib_gid_table_entry *entry)
303 {
304 	kref_put(&entry->kref, schedule_free_gid);
305 }
306 
307 static void put_gid_entry_locked(struct ib_gid_table_entry *entry)
308 {
309 	kref_put(&entry->kref, free_gid_entry);
310 }
311 
312 static int add_roce_gid(struct ib_gid_table_entry *entry)
313 {
314 	const struct ib_gid_attr *attr = &entry->attr;
315 	int ret;
316 
317 	if (!attr->ndev) {
318 		dev_err(&attr->device->dev, "%s NULL netdev port=%d index=%d\n",
319 			__func__, attr->port_num, attr->index);
320 		return -EINVAL;
321 	}
322 	if (rdma_cap_roce_gid_table(attr->device, attr->port_num)) {
323 		ret = attr->device->ops.add_gid(attr, &entry->context);
324 		if (ret) {
325 			dev_err(&attr->device->dev,
326 				"%s GID add failed port=%d index=%d\n",
327 				__func__, attr->port_num, attr->index);
328 			return ret;
329 		}
330 	}
331 	return 0;
332 }
333 
334 /**
335  * del_gid - Delete GID table entry
336  *
337  * @ib_dev:	IB device whose GID entry to be deleted
338  * @port:	Port number of the IB device
339  * @table:	GID table of the IB device for a port
340  * @ix:		GID entry index to delete
341  *
342  */
343 static void del_gid(struct ib_device *ib_dev, u8 port,
344 		    struct ib_gid_table *table, int ix)
345 {
346 	struct ib_gid_table_entry *entry;
347 
348 	lockdep_assert_held(&table->lock);
349 
350 	dev_dbg(&ib_dev->dev, "%s port=%d index=%d gid %pI6\n", __func__, port,
351 		ix, table->data_vec[ix]->attr.gid.raw);
352 
353 	write_lock_irq(&table->rwlock);
354 	entry = table->data_vec[ix];
355 	entry->state = GID_TABLE_ENTRY_PENDING_DEL;
356 	/*
357 	 * For non RoCE protocol, GID entry slot is ready to use.
358 	 */
359 	if (!rdma_protocol_roce(ib_dev, port))
360 		table->data_vec[ix] = NULL;
361 	write_unlock_irq(&table->rwlock);
362 
363 	if (rdma_cap_roce_gid_table(ib_dev, port))
364 		ib_dev->ops.del_gid(&entry->attr, &entry->context);
365 
366 	put_gid_entry_locked(entry);
367 }
368 
369 /**
370  * add_modify_gid - Add or modify GID table entry
371  *
372  * @table:	GID table in which GID to be added or modified
373  * @attr:	Attributes of the GID
374  *
375  * Returns 0 on success or appropriate error code. It accepts zero
376  * GID addition for non RoCE ports for HCA's who report them as valid
377  * GID. However such zero GIDs are not added to the cache.
378  */
379 static int add_modify_gid(struct ib_gid_table *table,
380 			  const struct ib_gid_attr *attr)
381 {
382 	struct ib_gid_table_entry *entry;
383 	int ret = 0;
384 
385 	/*
386 	 * Invalidate any old entry in the table to make it safe to write to
387 	 * this index.
388 	 */
389 	if (is_gid_entry_valid(table->data_vec[attr->index]))
390 		del_gid(attr->device, attr->port_num, table, attr->index);
391 
392 	/*
393 	 * Some HCA's report multiple GID entries with only one valid GID, and
394 	 * leave other unused entries as the zero GID. Convert zero GIDs to
395 	 * empty table entries instead of storing them.
396 	 */
397 	if (rdma_is_zero_gid(&attr->gid))
398 		return 0;
399 
400 	entry = alloc_gid_entry(attr);
401 	if (!entry)
402 		return -ENOMEM;
403 
404 	if (rdma_protocol_roce(attr->device, attr->port_num)) {
405 		ret = add_roce_gid(entry);
406 		if (ret)
407 			goto done;
408 	}
409 
410 	store_gid_entry(table, entry);
411 	return 0;
412 
413 done:
414 	put_gid_entry(entry);
415 	return ret;
416 }
417 
418 /* rwlock should be read locked, or lock should be held */
419 static int find_gid(struct ib_gid_table *table, const union ib_gid *gid,
420 		    const struct ib_gid_attr *val, bool default_gid,
421 		    unsigned long mask, int *pempty)
422 {
423 	int i = 0;
424 	int found = -1;
425 	int empty = pempty ? -1 : 0;
426 
427 	while (i < table->sz && (found < 0 || empty < 0)) {
428 		struct ib_gid_table_entry *data = table->data_vec[i];
429 		struct ib_gid_attr *attr;
430 		int curr_index = i;
431 
432 		i++;
433 
434 		/* find_gid() is used during GID addition where it is expected
435 		 * to return a free entry slot which is not duplicate.
436 		 * Free entry slot is requested and returned if pempty is set,
437 		 * so lookup free slot only if requested.
438 		 */
439 		if (pempty && empty < 0) {
440 			if (is_gid_entry_free(data) &&
441 			    default_gid ==
442 				is_gid_index_default(table, curr_index)) {
443 				/*
444 				 * Found an invalid (free) entry; allocate it.
445 				 * If default GID is requested, then our
446 				 * found slot must be one of the DEFAULT
447 				 * reserved slots or we fail.
448 				 * This ensures that only DEFAULT reserved
449 				 * slots are used for default property GIDs.
450 				 */
451 				empty = curr_index;
452 			}
453 		}
454 
455 		/*
456 		 * Additionally find_gid() is used to find valid entry during
457 		 * lookup operation; so ignore the entries which are marked as
458 		 * pending for removal and the entries which are marked as
459 		 * invalid.
460 		 */
461 		if (!is_gid_entry_valid(data))
462 			continue;
463 
464 		if (found >= 0)
465 			continue;
466 
467 		attr = &data->attr;
468 		if (mask & GID_ATTR_FIND_MASK_GID_TYPE &&
469 		    attr->gid_type != val->gid_type)
470 			continue;
471 
472 		if (mask & GID_ATTR_FIND_MASK_GID &&
473 		    memcmp(gid, &data->attr.gid, sizeof(*gid)))
474 			continue;
475 
476 		if (mask & GID_ATTR_FIND_MASK_NETDEV &&
477 		    attr->ndev != val->ndev)
478 			continue;
479 
480 		if (mask & GID_ATTR_FIND_MASK_DEFAULT &&
481 		    is_gid_index_default(table, curr_index) != default_gid)
482 			continue;
483 
484 		found = curr_index;
485 	}
486 
487 	if (pempty)
488 		*pempty = empty;
489 
490 	return found;
491 }
492 
493 static void make_default_gid(struct  net_device *dev, union ib_gid *gid)
494 {
495 	gid->global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL);
496 	addrconf_ifid_eui48(&gid->raw[8], dev);
497 }
498 
499 static int __ib_cache_gid_add(struct ib_device *ib_dev, u8 port,
500 			      union ib_gid *gid, struct ib_gid_attr *attr,
501 			      unsigned long mask, bool default_gid)
502 {
503 	struct ib_gid_table *table;
504 	int ret = 0;
505 	int empty;
506 	int ix;
507 
508 	/* Do not allow adding zero GID in support of
509 	 * IB spec version 1.3 section 4.1.1 point (6) and
510 	 * section 12.7.10 and section 12.7.20
511 	 */
512 	if (rdma_is_zero_gid(gid))
513 		return -EINVAL;
514 
515 	table = rdma_gid_table(ib_dev, port);
516 
517 	mutex_lock(&table->lock);
518 
519 	ix = find_gid(table, gid, attr, default_gid, mask, &empty);
520 	if (ix >= 0)
521 		goto out_unlock;
522 
523 	if (empty < 0) {
524 		ret = -ENOSPC;
525 		goto out_unlock;
526 	}
527 	attr->device = ib_dev;
528 	attr->index = empty;
529 	attr->port_num = port;
530 	attr->gid = *gid;
531 	ret = add_modify_gid(table, attr);
532 	if (!ret)
533 		dispatch_gid_change_event(ib_dev, port);
534 
535 out_unlock:
536 	mutex_unlock(&table->lock);
537 	if (ret)
538 		pr_warn("%s: unable to add gid %pI6 error=%d\n",
539 			__func__, gid->raw, ret);
540 	return ret;
541 }
542 
543 int ib_cache_gid_add(struct ib_device *ib_dev, u8 port,
544 		     union ib_gid *gid, struct ib_gid_attr *attr)
545 {
546 	struct net_device *idev;
547 	unsigned long mask;
548 	int ret;
549 
550 	idev = ib_device_get_netdev(ib_dev, port);
551 	if (idev && attr->ndev != idev) {
552 		union ib_gid default_gid;
553 
554 		/* Adding default GIDs is not permitted */
555 		make_default_gid(idev, &default_gid);
556 		if (!memcmp(gid, &default_gid, sizeof(*gid))) {
557 			dev_put(idev);
558 			return -EPERM;
559 		}
560 	}
561 	if (idev)
562 		dev_put(idev);
563 
564 	mask = GID_ATTR_FIND_MASK_GID |
565 	       GID_ATTR_FIND_MASK_GID_TYPE |
566 	       GID_ATTR_FIND_MASK_NETDEV;
567 
568 	ret = __ib_cache_gid_add(ib_dev, port, gid, attr, mask, false);
569 	return ret;
570 }
571 
572 static int
573 _ib_cache_gid_del(struct ib_device *ib_dev, u8 port,
574 		  union ib_gid *gid, struct ib_gid_attr *attr,
575 		  unsigned long mask, bool default_gid)
576 {
577 	struct ib_gid_table *table;
578 	int ret = 0;
579 	int ix;
580 
581 	table = rdma_gid_table(ib_dev, port);
582 
583 	mutex_lock(&table->lock);
584 
585 	ix = find_gid(table, gid, attr, default_gid, mask, NULL);
586 	if (ix < 0) {
587 		ret = -EINVAL;
588 		goto out_unlock;
589 	}
590 
591 	del_gid(ib_dev, port, table, ix);
592 	dispatch_gid_change_event(ib_dev, port);
593 
594 out_unlock:
595 	mutex_unlock(&table->lock);
596 	if (ret)
597 		pr_debug("%s: can't delete gid %pI6 error=%d\n",
598 			 __func__, gid->raw, ret);
599 	return ret;
600 }
601 
602 int ib_cache_gid_del(struct ib_device *ib_dev, u8 port,
603 		     union ib_gid *gid, struct ib_gid_attr *attr)
604 {
605 	unsigned long mask = GID_ATTR_FIND_MASK_GID	  |
606 			     GID_ATTR_FIND_MASK_GID_TYPE |
607 			     GID_ATTR_FIND_MASK_DEFAULT  |
608 			     GID_ATTR_FIND_MASK_NETDEV;
609 
610 	return _ib_cache_gid_del(ib_dev, port, gid, attr, mask, false);
611 }
612 
613 int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u8 port,
614 				     struct net_device *ndev)
615 {
616 	struct ib_gid_table *table;
617 	int ix;
618 	bool deleted = false;
619 
620 	table = rdma_gid_table(ib_dev, port);
621 
622 	mutex_lock(&table->lock);
623 
624 	for (ix = 0; ix < table->sz; ix++) {
625 		if (is_gid_entry_valid(table->data_vec[ix]) &&
626 		    table->data_vec[ix]->attr.ndev == ndev) {
627 			del_gid(ib_dev, port, table, ix);
628 			deleted = true;
629 		}
630 	}
631 
632 	mutex_unlock(&table->lock);
633 
634 	if (deleted)
635 		dispatch_gid_change_event(ib_dev, port);
636 
637 	return 0;
638 }
639 
640 /**
641  * rdma_find_gid_by_port - Returns the GID entry attributes when it finds
642  * a valid GID entry for given search parameters. It searches for the specified
643  * GID value in the local software cache.
644  * @device: The device to query.
645  * @gid: The GID value to search for.
646  * @gid_type: The GID type to search for.
647  * @port_num: The port number of the device where the GID value should be
648  *   searched.
649  * @ndev: In RoCE, the net device of the device. NULL means ignore.
650  *
651  * Returns sgid attributes if the GID is found with valid reference or
652  * returns ERR_PTR for the error.
653  * The caller must invoke rdma_put_gid_attr() to release the reference.
654  */
655 const struct ib_gid_attr *
656 rdma_find_gid_by_port(struct ib_device *ib_dev,
657 		      const union ib_gid *gid,
658 		      enum ib_gid_type gid_type,
659 		      u8 port, struct net_device *ndev)
660 {
661 	int local_index;
662 	struct ib_gid_table *table;
663 	unsigned long mask = GID_ATTR_FIND_MASK_GID |
664 			     GID_ATTR_FIND_MASK_GID_TYPE;
665 	struct ib_gid_attr val = {.ndev = ndev, .gid_type = gid_type};
666 	const struct ib_gid_attr *attr;
667 	unsigned long flags;
668 
669 	if (!rdma_is_port_valid(ib_dev, port))
670 		return ERR_PTR(-ENOENT);
671 
672 	table = rdma_gid_table(ib_dev, port);
673 
674 	if (ndev)
675 		mask |= GID_ATTR_FIND_MASK_NETDEV;
676 
677 	read_lock_irqsave(&table->rwlock, flags);
678 	local_index = find_gid(table, gid, &val, false, mask, NULL);
679 	if (local_index >= 0) {
680 		get_gid_entry(table->data_vec[local_index]);
681 		attr = &table->data_vec[local_index]->attr;
682 		read_unlock_irqrestore(&table->rwlock, flags);
683 		return attr;
684 	}
685 
686 	read_unlock_irqrestore(&table->rwlock, flags);
687 	return ERR_PTR(-ENOENT);
688 }
689 EXPORT_SYMBOL(rdma_find_gid_by_port);
690 
691 /**
692  * rdma_find_gid_by_filter - Returns the GID table attribute where a
693  * specified GID value occurs
694  * @device: The device to query.
695  * @gid: The GID value to search for.
696  * @port: The port number of the device where the GID value could be
697  *   searched.
698  * @filter: The filter function is executed on any matching GID in the table.
699  *   If the filter function returns true, the corresponding index is returned,
700  *   otherwise, we continue searching the GID table. It's guaranteed that
701  *   while filter is executed, ndev field is valid and the structure won't
702  *   change. filter is executed in an atomic context. filter must not be NULL.
703  *
704  * rdma_find_gid_by_filter() searches for the specified GID value
705  * of which the filter function returns true in the port's GID table.
706  *
707  */
708 const struct ib_gid_attr *rdma_find_gid_by_filter(
709 	struct ib_device *ib_dev, const union ib_gid *gid, u8 port,
710 	bool (*filter)(const union ib_gid *gid, const struct ib_gid_attr *,
711 		       void *),
712 	void *context)
713 {
714 	const struct ib_gid_attr *res = ERR_PTR(-ENOENT);
715 	struct ib_gid_table *table;
716 	unsigned long flags;
717 	unsigned int i;
718 
719 	if (!rdma_is_port_valid(ib_dev, port))
720 		return ERR_PTR(-EINVAL);
721 
722 	table = rdma_gid_table(ib_dev, port);
723 
724 	read_lock_irqsave(&table->rwlock, flags);
725 	for (i = 0; i < table->sz; i++) {
726 		struct ib_gid_table_entry *entry = table->data_vec[i];
727 
728 		if (!is_gid_entry_valid(entry))
729 			continue;
730 
731 		if (memcmp(gid, &entry->attr.gid, sizeof(*gid)))
732 			continue;
733 
734 		if (filter(gid, &entry->attr, context)) {
735 			get_gid_entry(entry);
736 			res = &entry->attr;
737 			break;
738 		}
739 	}
740 	read_unlock_irqrestore(&table->rwlock, flags);
741 	return res;
742 }
743 
744 static struct ib_gid_table *alloc_gid_table(int sz)
745 {
746 	struct ib_gid_table *table = kzalloc(sizeof(*table), GFP_KERNEL);
747 
748 	if (!table)
749 		return NULL;
750 
751 	table->data_vec = kcalloc(sz, sizeof(*table->data_vec), GFP_KERNEL);
752 	if (!table->data_vec)
753 		goto err_free_table;
754 
755 	mutex_init(&table->lock);
756 
757 	table->sz = sz;
758 	rwlock_init(&table->rwlock);
759 	return table;
760 
761 err_free_table:
762 	kfree(table);
763 	return NULL;
764 }
765 
766 static void release_gid_table(struct ib_device *device,
767 			      struct ib_gid_table *table)
768 {
769 	bool leak = false;
770 	int i;
771 
772 	if (!table)
773 		return;
774 
775 	for (i = 0; i < table->sz; i++) {
776 		if (is_gid_entry_free(table->data_vec[i]))
777 			continue;
778 		if (kref_read(&table->data_vec[i]->kref) > 1) {
779 			dev_err(&device->dev,
780 				"GID entry ref leak for index %d ref=%d\n", i,
781 				kref_read(&table->data_vec[i]->kref));
782 			leak = true;
783 		}
784 	}
785 	if (leak)
786 		return;
787 
788 	kfree(table->data_vec);
789 	kfree(table);
790 }
791 
792 static void cleanup_gid_table_port(struct ib_device *ib_dev, u8 port,
793 				   struct ib_gid_table *table)
794 {
795 	int i;
796 	bool deleted = false;
797 
798 	if (!table)
799 		return;
800 
801 	mutex_lock(&table->lock);
802 	for (i = 0; i < table->sz; ++i) {
803 		if (is_gid_entry_valid(table->data_vec[i])) {
804 			del_gid(ib_dev, port, table, i);
805 			deleted = true;
806 		}
807 	}
808 	mutex_unlock(&table->lock);
809 
810 	if (deleted)
811 		dispatch_gid_change_event(ib_dev, port);
812 }
813 
814 void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port,
815 				  struct net_device *ndev,
816 				  unsigned long gid_type_mask,
817 				  enum ib_cache_gid_default_mode mode)
818 {
819 	union ib_gid gid = { };
820 	struct ib_gid_attr gid_attr;
821 	unsigned int gid_type;
822 	unsigned long mask;
823 
824 	mask = GID_ATTR_FIND_MASK_GID_TYPE |
825 	       GID_ATTR_FIND_MASK_DEFAULT |
826 	       GID_ATTR_FIND_MASK_NETDEV;
827 	memset(&gid_attr, 0, sizeof(gid_attr));
828 	gid_attr.ndev = ndev;
829 
830 	for (gid_type = 0; gid_type < IB_GID_TYPE_SIZE; ++gid_type) {
831 		if (1UL << gid_type & ~gid_type_mask)
832 			continue;
833 
834 		gid_attr.gid_type = gid_type;
835 
836 		if (mode == IB_CACHE_GID_DEFAULT_MODE_SET) {
837 			make_default_gid(ndev, &gid);
838 			__ib_cache_gid_add(ib_dev, port, &gid,
839 					   &gid_attr, mask, true);
840 		} else if (mode == IB_CACHE_GID_DEFAULT_MODE_DELETE) {
841 			_ib_cache_gid_del(ib_dev, port, &gid,
842 					  &gid_attr, mask, true);
843 		}
844 	}
845 }
846 
847 static void gid_table_reserve_default(struct ib_device *ib_dev, u8 port,
848 				      struct ib_gid_table *table)
849 {
850 	unsigned int i;
851 	unsigned long roce_gid_type_mask;
852 	unsigned int num_default_gids;
853 
854 	roce_gid_type_mask = roce_gid_type_mask_support(ib_dev, port);
855 	num_default_gids = hweight_long(roce_gid_type_mask);
856 	/* Reserve starting indices for default GIDs */
857 	for (i = 0; i < num_default_gids && i < table->sz; i++)
858 		table->default_gid_indices |= BIT(i);
859 }
860 
861 
862 static void gid_table_release_one(struct ib_device *ib_dev)
863 {
864 	unsigned int p;
865 
866 	rdma_for_each_port (ib_dev, p) {
867 		release_gid_table(ib_dev, ib_dev->port_data[p].cache.gid);
868 		ib_dev->port_data[p].cache.gid = NULL;
869 	}
870 }
871 
872 static int _gid_table_setup_one(struct ib_device *ib_dev)
873 {
874 	struct ib_gid_table *table;
875 	unsigned int rdma_port;
876 
877 	rdma_for_each_port (ib_dev, rdma_port) {
878 		table = alloc_gid_table(
879 			ib_dev->port_data[rdma_port].immutable.gid_tbl_len);
880 		if (!table)
881 			goto rollback_table_setup;
882 
883 		gid_table_reserve_default(ib_dev, rdma_port, table);
884 		ib_dev->port_data[rdma_port].cache.gid = table;
885 	}
886 	return 0;
887 
888 rollback_table_setup:
889 	gid_table_release_one(ib_dev);
890 	return -ENOMEM;
891 }
892 
893 static void gid_table_cleanup_one(struct ib_device *ib_dev)
894 {
895 	unsigned int p;
896 
897 	rdma_for_each_port (ib_dev, p)
898 		cleanup_gid_table_port(ib_dev, p,
899 				       ib_dev->port_data[p].cache.gid);
900 }
901 
902 static int gid_table_setup_one(struct ib_device *ib_dev)
903 {
904 	int err;
905 
906 	err = _gid_table_setup_one(ib_dev);
907 
908 	if (err)
909 		return err;
910 
911 	rdma_roce_rescan_device(ib_dev);
912 
913 	return err;
914 }
915 
916 /**
917  * rdma_query_gid - Read the GID content from the GID software cache
918  * @device:		Device to query the GID
919  * @port_num:		Port number of the device
920  * @index:		Index of the GID table entry to read
921  * @gid:		Pointer to GID where to store the entry's GID
922  *
923  * rdma_query_gid() only reads the GID entry content for requested device,
924  * port and index. It reads for IB, RoCE and iWarp link layers.  It doesn't
925  * hold any reference to the GID table entry in the HCA or software cache.
926  *
927  * Returns 0 on success or appropriate error code.
928  *
929  */
930 int rdma_query_gid(struct ib_device *device, u8 port_num,
931 		   int index, union ib_gid *gid)
932 {
933 	struct ib_gid_table *table;
934 	unsigned long flags;
935 	int res = -EINVAL;
936 
937 	if (!rdma_is_port_valid(device, port_num))
938 		return -EINVAL;
939 
940 	table = rdma_gid_table(device, port_num);
941 	read_lock_irqsave(&table->rwlock, flags);
942 
943 	if (index < 0 || index >= table->sz ||
944 	    !is_gid_entry_valid(table->data_vec[index]))
945 		goto done;
946 
947 	memcpy(gid, &table->data_vec[index]->attr.gid, sizeof(*gid));
948 	res = 0;
949 
950 done:
951 	read_unlock_irqrestore(&table->rwlock, flags);
952 	return res;
953 }
954 EXPORT_SYMBOL(rdma_query_gid);
955 
956 /**
957  * rdma_find_gid - Returns SGID attributes if the matching GID is found.
958  * @device: The device to query.
959  * @gid: The GID value to search for.
960  * @gid_type: The GID type to search for.
961  * @ndev: In RoCE, the net device of the device. NULL means ignore.
962  *
963  * rdma_find_gid() searches for the specified GID value in the software cache.
964  *
965  * Returns GID attributes if a valid GID is found or returns ERR_PTR for the
966  * error. The caller must invoke rdma_put_gid_attr() to release the reference.
967  *
968  */
969 const struct ib_gid_attr *rdma_find_gid(struct ib_device *device,
970 					const union ib_gid *gid,
971 					enum ib_gid_type gid_type,
972 					struct net_device *ndev)
973 {
974 	unsigned long mask = GID_ATTR_FIND_MASK_GID |
975 			     GID_ATTR_FIND_MASK_GID_TYPE;
976 	struct ib_gid_attr gid_attr_val = {.ndev = ndev, .gid_type = gid_type};
977 	unsigned int p;
978 
979 	if (ndev)
980 		mask |= GID_ATTR_FIND_MASK_NETDEV;
981 
982 	rdma_for_each_port(device, p) {
983 		struct ib_gid_table *table;
984 		unsigned long flags;
985 		int index;
986 
987 		table = device->port_data[p].cache.gid;
988 		read_lock_irqsave(&table->rwlock, flags);
989 		index = find_gid(table, gid, &gid_attr_val, false, mask, NULL);
990 		if (index >= 0) {
991 			const struct ib_gid_attr *attr;
992 
993 			get_gid_entry(table->data_vec[index]);
994 			attr = &table->data_vec[index]->attr;
995 			read_unlock_irqrestore(&table->rwlock, flags);
996 			return attr;
997 		}
998 		read_unlock_irqrestore(&table->rwlock, flags);
999 	}
1000 
1001 	return ERR_PTR(-ENOENT);
1002 }
1003 EXPORT_SYMBOL(rdma_find_gid);
1004 
1005 int ib_get_cached_pkey(struct ib_device *device,
1006 		       u8                port_num,
1007 		       int               index,
1008 		       u16              *pkey)
1009 {
1010 	struct ib_pkey_cache *cache;
1011 	unsigned long flags;
1012 	int ret = 0;
1013 
1014 	if (!rdma_is_port_valid(device, port_num))
1015 		return -EINVAL;
1016 
1017 	read_lock_irqsave(&device->cache.lock, flags);
1018 
1019 	cache = device->port_data[port_num].cache.pkey;
1020 
1021 	if (index < 0 || index >= cache->table_len)
1022 		ret = -EINVAL;
1023 	else
1024 		*pkey = cache->table[index];
1025 
1026 	read_unlock_irqrestore(&device->cache.lock, flags);
1027 
1028 	return ret;
1029 }
1030 EXPORT_SYMBOL(ib_get_cached_pkey);
1031 
1032 int ib_get_cached_subnet_prefix(struct ib_device *device,
1033 				u8                port_num,
1034 				u64              *sn_pfx)
1035 {
1036 	unsigned long flags;
1037 
1038 	if (!rdma_is_port_valid(device, port_num))
1039 		return -EINVAL;
1040 
1041 	read_lock_irqsave(&device->cache.lock, flags);
1042 	*sn_pfx = device->port_data[port_num].cache.subnet_prefix;
1043 	read_unlock_irqrestore(&device->cache.lock, flags);
1044 
1045 	return 0;
1046 }
1047 EXPORT_SYMBOL(ib_get_cached_subnet_prefix);
1048 
1049 int ib_find_cached_pkey(struct ib_device *device,
1050 			u8                port_num,
1051 			u16               pkey,
1052 			u16              *index)
1053 {
1054 	struct ib_pkey_cache *cache;
1055 	unsigned long flags;
1056 	int i;
1057 	int ret = -ENOENT;
1058 	int partial_ix = -1;
1059 
1060 	if (!rdma_is_port_valid(device, port_num))
1061 		return -EINVAL;
1062 
1063 	read_lock_irqsave(&device->cache.lock, flags);
1064 
1065 	cache = device->port_data[port_num].cache.pkey;
1066 
1067 	*index = -1;
1068 
1069 	for (i = 0; i < cache->table_len; ++i)
1070 		if ((cache->table[i] & 0x7fff) == (pkey & 0x7fff)) {
1071 			if (cache->table[i] & 0x8000) {
1072 				*index = i;
1073 				ret = 0;
1074 				break;
1075 			} else
1076 				partial_ix = i;
1077 		}
1078 
1079 	if (ret && partial_ix >= 0) {
1080 		*index = partial_ix;
1081 		ret = 0;
1082 	}
1083 
1084 	read_unlock_irqrestore(&device->cache.lock, flags);
1085 
1086 	return ret;
1087 }
1088 EXPORT_SYMBOL(ib_find_cached_pkey);
1089 
1090 int ib_find_exact_cached_pkey(struct ib_device *device,
1091 			      u8                port_num,
1092 			      u16               pkey,
1093 			      u16              *index)
1094 {
1095 	struct ib_pkey_cache *cache;
1096 	unsigned long flags;
1097 	int i;
1098 	int ret = -ENOENT;
1099 
1100 	if (!rdma_is_port_valid(device, port_num))
1101 		return -EINVAL;
1102 
1103 	read_lock_irqsave(&device->cache.lock, flags);
1104 
1105 	cache = device->port_data[port_num].cache.pkey;
1106 
1107 	*index = -1;
1108 
1109 	for (i = 0; i < cache->table_len; ++i)
1110 		if (cache->table[i] == pkey) {
1111 			*index = i;
1112 			ret = 0;
1113 			break;
1114 		}
1115 
1116 	read_unlock_irqrestore(&device->cache.lock, flags);
1117 
1118 	return ret;
1119 }
1120 EXPORT_SYMBOL(ib_find_exact_cached_pkey);
1121 
1122 int ib_get_cached_lmc(struct ib_device *device,
1123 		      u8                port_num,
1124 		      u8                *lmc)
1125 {
1126 	unsigned long flags;
1127 	int ret = 0;
1128 
1129 	if (!rdma_is_port_valid(device, port_num))
1130 		return -EINVAL;
1131 
1132 	read_lock_irqsave(&device->cache.lock, flags);
1133 	*lmc = device->port_data[port_num].cache.lmc;
1134 	read_unlock_irqrestore(&device->cache.lock, flags);
1135 
1136 	return ret;
1137 }
1138 EXPORT_SYMBOL(ib_get_cached_lmc);
1139 
1140 int ib_get_cached_port_state(struct ib_device   *device,
1141 			     u8                  port_num,
1142 			     enum ib_port_state *port_state)
1143 {
1144 	unsigned long flags;
1145 	int ret = 0;
1146 
1147 	if (!rdma_is_port_valid(device, port_num))
1148 		return -EINVAL;
1149 
1150 	read_lock_irqsave(&device->cache.lock, flags);
1151 	*port_state = device->port_data[port_num].cache.port_state;
1152 	read_unlock_irqrestore(&device->cache.lock, flags);
1153 
1154 	return ret;
1155 }
1156 EXPORT_SYMBOL(ib_get_cached_port_state);
1157 
1158 /**
1159  * rdma_get_gid_attr - Returns GID attributes for a port of a device
1160  * at a requested gid_index, if a valid GID entry exists.
1161  * @device:		The device to query.
1162  * @port_num:		The port number on the device where the GID value
1163  *			is to be queried.
1164  * @index:		Index of the GID table entry whose attributes are to
1165  *                      be queried.
1166  *
1167  * rdma_get_gid_attr() acquires reference count of gid attributes from the
1168  * cached GID table. Caller must invoke rdma_put_gid_attr() to release
1169  * reference to gid attribute regardless of link layer.
1170  *
1171  * Returns pointer to valid gid attribute or ERR_PTR for the appropriate error
1172  * code.
1173  */
1174 const struct ib_gid_attr *
1175 rdma_get_gid_attr(struct ib_device *device, u8 port_num, int index)
1176 {
1177 	const struct ib_gid_attr *attr = ERR_PTR(-EINVAL);
1178 	struct ib_gid_table *table;
1179 	unsigned long flags;
1180 
1181 	if (!rdma_is_port_valid(device, port_num))
1182 		return ERR_PTR(-EINVAL);
1183 
1184 	table = rdma_gid_table(device, port_num);
1185 	if (index < 0 || index >= table->sz)
1186 		return ERR_PTR(-EINVAL);
1187 
1188 	read_lock_irqsave(&table->rwlock, flags);
1189 	if (!is_gid_entry_valid(table->data_vec[index]))
1190 		goto done;
1191 
1192 	get_gid_entry(table->data_vec[index]);
1193 	attr = &table->data_vec[index]->attr;
1194 done:
1195 	read_unlock_irqrestore(&table->rwlock, flags);
1196 	return attr;
1197 }
1198 EXPORT_SYMBOL(rdma_get_gid_attr);
1199 
1200 /**
1201  * rdma_put_gid_attr - Release reference to the GID attribute
1202  * @attr:		Pointer to the GID attribute whose reference
1203  *			needs to be released.
1204  *
1205  * rdma_put_gid_attr() must be used to release reference whose
1206  * reference is acquired using rdma_get_gid_attr() or any APIs
1207  * which returns a pointer to the ib_gid_attr regardless of link layer
1208  * of IB or RoCE.
1209  *
1210  */
1211 void rdma_put_gid_attr(const struct ib_gid_attr *attr)
1212 {
1213 	struct ib_gid_table_entry *entry =
1214 		container_of(attr, struct ib_gid_table_entry, attr);
1215 
1216 	put_gid_entry(entry);
1217 }
1218 EXPORT_SYMBOL(rdma_put_gid_attr);
1219 
1220 /**
1221  * rdma_hold_gid_attr - Get reference to existing GID attribute
1222  *
1223  * @attr:		Pointer to the GID attribute whose reference
1224  *			needs to be taken.
1225  *
1226  * Increase the reference count to a GID attribute to keep it from being
1227  * freed. Callers are required to already be holding a reference to attribute.
1228  *
1229  */
1230 void rdma_hold_gid_attr(const struct ib_gid_attr *attr)
1231 {
1232 	struct ib_gid_table_entry *entry =
1233 		container_of(attr, struct ib_gid_table_entry, attr);
1234 
1235 	get_gid_entry(entry);
1236 }
1237 EXPORT_SYMBOL(rdma_hold_gid_attr);
1238 
1239 /**
1240  * rdma_read_gid_attr_ndev_rcu - Read GID attribute netdevice
1241  * which must be in UP state.
1242  *
1243  * @attr:Pointer to the GID attribute
1244  *
1245  * Returns pointer to netdevice if the netdevice was attached to GID and
1246  * netdevice is in UP state. Caller must hold RCU lock as this API
1247  * reads the netdev flags which can change while netdevice migrates to
1248  * different net namespace. Returns ERR_PTR with error code otherwise.
1249  *
1250  */
1251 struct net_device *rdma_read_gid_attr_ndev_rcu(const struct ib_gid_attr *attr)
1252 {
1253 	struct ib_gid_table_entry *entry =
1254 			container_of(attr, struct ib_gid_table_entry, attr);
1255 	struct ib_device *device = entry->attr.device;
1256 	struct net_device *ndev = ERR_PTR(-ENODEV);
1257 	u8 port_num = entry->attr.port_num;
1258 	struct ib_gid_table *table;
1259 	unsigned long flags;
1260 	bool valid;
1261 
1262 	table = rdma_gid_table(device, port_num);
1263 
1264 	read_lock_irqsave(&table->rwlock, flags);
1265 	valid = is_gid_entry_valid(table->data_vec[attr->index]);
1266 	if (valid && attr->ndev && (READ_ONCE(attr->ndev->flags) & IFF_UP))
1267 		ndev = attr->ndev;
1268 	read_unlock_irqrestore(&table->rwlock, flags);
1269 	return ndev;
1270 }
1271 
1272 static int config_non_roce_gid_cache(struct ib_device *device,
1273 				     u8 port, int gid_tbl_len)
1274 {
1275 	struct ib_gid_attr gid_attr = {};
1276 	struct ib_gid_table *table;
1277 	int ret = 0;
1278 	int i;
1279 
1280 	gid_attr.device = device;
1281 	gid_attr.port_num = port;
1282 	table = rdma_gid_table(device, port);
1283 
1284 	mutex_lock(&table->lock);
1285 	for (i = 0; i < gid_tbl_len; ++i) {
1286 		if (!device->ops.query_gid)
1287 			continue;
1288 		ret = device->ops.query_gid(device, port, i, &gid_attr.gid);
1289 		if (ret) {
1290 			dev_warn(&device->dev,
1291 				 "query_gid failed (%d) for index %d\n", ret,
1292 				 i);
1293 			goto err;
1294 		}
1295 		gid_attr.index = i;
1296 		add_modify_gid(table, &gid_attr);
1297 	}
1298 err:
1299 	mutex_unlock(&table->lock);
1300 	return ret;
1301 }
1302 
1303 static void ib_cache_update(struct ib_device *device,
1304 			    u8                port,
1305 			    bool	      enforce_security)
1306 {
1307 	struct ib_port_attr       *tprops = NULL;
1308 	struct ib_pkey_cache      *pkey_cache = NULL, *old_pkey_cache;
1309 	int                        i;
1310 	int                        ret;
1311 
1312 	if (!rdma_is_port_valid(device, port))
1313 		return;
1314 
1315 	tprops = kmalloc(sizeof *tprops, GFP_KERNEL);
1316 	if (!tprops)
1317 		return;
1318 
1319 	ret = ib_query_port(device, port, tprops);
1320 	if (ret) {
1321 		dev_warn(&device->dev, "ib_query_port failed (%d)\n", ret);
1322 		goto err;
1323 	}
1324 
1325 	if (!rdma_protocol_roce(device, port)) {
1326 		ret = config_non_roce_gid_cache(device, port,
1327 						tprops->gid_tbl_len);
1328 		if (ret)
1329 			goto err;
1330 	}
1331 
1332 	pkey_cache = kmalloc(struct_size(pkey_cache, table,
1333 					 tprops->pkey_tbl_len),
1334 			     GFP_KERNEL);
1335 	if (!pkey_cache)
1336 		goto err;
1337 
1338 	pkey_cache->table_len = tprops->pkey_tbl_len;
1339 
1340 	for (i = 0; i < pkey_cache->table_len; ++i) {
1341 		ret = ib_query_pkey(device, port, i, pkey_cache->table + i);
1342 		if (ret) {
1343 			dev_warn(&device->dev,
1344 				 "ib_query_pkey failed (%d) for index %d\n",
1345 				 ret, i);
1346 			goto err;
1347 		}
1348 	}
1349 
1350 	write_lock_irq(&device->cache.lock);
1351 
1352 	old_pkey_cache = device->port_data[port].cache.pkey;
1353 
1354 	device->port_data[port].cache.pkey = pkey_cache;
1355 	device->port_data[port].cache.lmc = tprops->lmc;
1356 	device->port_data[port].cache.port_state = tprops->state;
1357 
1358 	device->port_data[port].cache.subnet_prefix = tprops->subnet_prefix;
1359 	write_unlock_irq(&device->cache.lock);
1360 
1361 	if (enforce_security)
1362 		ib_security_cache_change(device,
1363 					 port,
1364 					 tprops->subnet_prefix);
1365 
1366 	kfree(old_pkey_cache);
1367 	kfree(tprops);
1368 	return;
1369 
1370 err:
1371 	kfree(pkey_cache);
1372 	kfree(tprops);
1373 }
1374 
1375 static void ib_cache_task(struct work_struct *_work)
1376 {
1377 	struct ib_update_work *work =
1378 		container_of(_work, struct ib_update_work, work);
1379 
1380 	ib_cache_update(work->device,
1381 			work->port_num,
1382 			work->enforce_security);
1383 	kfree(work);
1384 }
1385 
1386 static void ib_cache_event(struct ib_event_handler *handler,
1387 			   struct ib_event *event)
1388 {
1389 	struct ib_update_work *work;
1390 
1391 	if (event->event == IB_EVENT_PORT_ERR    ||
1392 	    event->event == IB_EVENT_PORT_ACTIVE ||
1393 	    event->event == IB_EVENT_LID_CHANGE  ||
1394 	    event->event == IB_EVENT_PKEY_CHANGE ||
1395 	    event->event == IB_EVENT_SM_CHANGE   ||
1396 	    event->event == IB_EVENT_CLIENT_REREGISTER ||
1397 	    event->event == IB_EVENT_GID_CHANGE) {
1398 		work = kmalloc(sizeof *work, GFP_ATOMIC);
1399 		if (work) {
1400 			INIT_WORK(&work->work, ib_cache_task);
1401 			work->device   = event->device;
1402 			work->port_num = event->element.port_num;
1403 			if (event->event == IB_EVENT_PKEY_CHANGE ||
1404 			    event->event == IB_EVENT_GID_CHANGE)
1405 				work->enforce_security = true;
1406 			else
1407 				work->enforce_security = false;
1408 
1409 			queue_work(ib_wq, &work->work);
1410 		}
1411 	}
1412 }
1413 
1414 int ib_cache_setup_one(struct ib_device *device)
1415 {
1416 	unsigned int p;
1417 	int err;
1418 
1419 	rwlock_init(&device->cache.lock);
1420 
1421 	err = gid_table_setup_one(device);
1422 	if (err)
1423 		return err;
1424 
1425 	rdma_for_each_port (device, p)
1426 		ib_cache_update(device, p, true);
1427 
1428 	INIT_IB_EVENT_HANDLER(&device->cache.event_handler,
1429 			      device, ib_cache_event);
1430 	ib_register_event_handler(&device->cache.event_handler);
1431 	return 0;
1432 }
1433 
1434 void ib_cache_release_one(struct ib_device *device)
1435 {
1436 	unsigned int p;
1437 
1438 	/*
1439 	 * The release function frees all the cache elements.
1440 	 * This function should be called as part of freeing
1441 	 * all the device's resources when the cache could no
1442 	 * longer be accessed.
1443 	 */
1444 	rdma_for_each_port (device, p)
1445 		kfree(device->port_data[p].cache.pkey);
1446 
1447 	gid_table_release_one(device);
1448 }
1449 
1450 void ib_cache_cleanup_one(struct ib_device *device)
1451 {
1452 	/* The cleanup function unregisters the event handler,
1453 	 * waits for all in-progress workqueue elements and cleans
1454 	 * up the GID cache. This function should be called after
1455 	 * the device was removed from the devices list and all
1456 	 * clients were removed, so the cache exists but is
1457 	 * non-functional and shouldn't be updated anymore.
1458 	 */
1459 	ib_unregister_event_handler(&device->cache.event_handler);
1460 	flush_workqueue(ib_wq);
1461 	gid_table_cleanup_one(device);
1462 
1463 	/*
1464 	 * Flush the wq second time for any pending GID delete work.
1465 	 */
1466 	flush_workqueue(ib_wq);
1467 }
1468