| .. | .. |
|---|
| 49 | 49 | */ |
|---|
| 50 | 50 | const char ib_qib_version[] = QIB_DRIVER_VERSION "\n"; |
|---|
| 51 | 51 | |
|---|
| 52 | | -DEFINE_SPINLOCK(qib_devs_lock); |
|---|
| 53 | | -LIST_HEAD(qib_dev_list); |
|---|
| 54 | 52 | DEFINE_MUTEX(qib_mutex); /* general driver use */ |
|---|
| 55 | 53 | |
|---|
| 56 | 54 | unsigned qib_ibmtu; |
|---|
| .. | .. |
|---|
| 96 | 94 | { |
|---|
| 97 | 95 | struct qib_devdata *dd; |
|---|
| 98 | 96 | struct qib_pportdata *ppd; |
|---|
| 99 | | - unsigned long flags; |
|---|
| 97 | + unsigned long index, flags; |
|---|
| 100 | 98 | int pidx, nunits_active = 0; |
|---|
| 101 | 99 | |
|---|
| 102 | | - spin_lock_irqsave(&qib_devs_lock, flags); |
|---|
| 103 | | - list_for_each_entry(dd, &qib_dev_list, list) { |
|---|
| 100 | + xa_lock_irqsave(&qib_dev_table, flags); |
|---|
| 101 | + xa_for_each(&qib_dev_table, index, dd) { |
|---|
| 104 | 102 | if (!(dd->flags & QIB_PRESENT) || !dd->kregbase) |
|---|
| 105 | 103 | continue; |
|---|
| 106 | 104 | for (pidx = 0; pidx < dd->num_pports; ++pidx) { |
|---|
| .. | .. |
|---|
| 112 | 110 | } |
|---|
| 113 | 111 | } |
|---|
| 114 | 112 | } |
|---|
| 115 | | - spin_unlock_irqrestore(&qib_devs_lock, flags); |
|---|
| 113 | + xa_unlock_irqrestore(&qib_dev_table, flags); |
|---|
| 116 | 114 | return nunits_active; |
|---|
| 117 | 115 | } |
|---|
| 118 | 116 | |
|---|
| .. | .. |
|---|
| 125 | 123 | { |
|---|
| 126 | 124 | int nunits = 0, npresent = 0, nup = 0; |
|---|
| 127 | 125 | struct qib_devdata *dd; |
|---|
| 128 | | - unsigned long flags; |
|---|
| 126 | + unsigned long index, flags; |
|---|
| 129 | 127 | int pidx; |
|---|
| 130 | 128 | struct qib_pportdata *ppd; |
|---|
| 131 | 129 | |
|---|
| 132 | | - spin_lock_irqsave(&qib_devs_lock, flags); |
|---|
| 133 | | - |
|---|
| 134 | | - list_for_each_entry(dd, &qib_dev_list, list) { |
|---|
| 130 | + xa_lock_irqsave(&qib_dev_table, flags); |
|---|
| 131 | + xa_for_each(&qib_dev_table, index, dd) { |
|---|
| 135 | 132 | nunits++; |
|---|
| 136 | 133 | if ((dd->flags & QIB_PRESENT) && dd->kregbase) |
|---|
| 137 | 134 | npresent++; |
|---|
| .. | .. |
|---|
| 142 | 139 | nup++; |
|---|
| 143 | 140 | } |
|---|
| 144 | 141 | } |
|---|
| 145 | | - |
|---|
| 146 | | - spin_unlock_irqrestore(&qib_devs_lock, flags); |
|---|
| 142 | + xa_unlock_irqrestore(&qib_dev_table, flags); |
|---|
| 147 | 143 | |
|---|
| 148 | 144 | if (npresentp) |
|---|
| 149 | 145 | *npresentp = npresent; |
|---|