.. | .. |
---|
111 | 111 | int err = 0; |
---|
112 | 112 | void *ptr; |
---|
113 | 113 | |
---|
114 | | - raw_spin_lock_irqsave(&qs->lock, flags); |
---|
| 114 | + if (in_nmi()) { |
---|
| 115 | + if (!raw_spin_trylock_irqsave(&qs->lock, flags)) |
---|
| 116 | + return -EBUSY; |
---|
| 117 | + } else { |
---|
| 118 | + raw_spin_lock_irqsave(&qs->lock, flags); |
---|
| 119 | + } |
---|
115 | 120 | |
---|
116 | 121 | if (queue_stack_map_is_empty(qs)) { |
---|
117 | 122 | memset(value, 0, qs->map.value_size); |
---|
.. | .. |
---|
141 | 146 | void *ptr; |
---|
142 | 147 | u32 index; |
---|
143 | 148 | |
---|
144 | | - raw_spin_lock_irqsave(&qs->lock, flags); |
---|
| 149 | + if (in_nmi()) { |
---|
| 150 | + if (!raw_spin_trylock_irqsave(&qs->lock, flags)) |
---|
| 151 | + return -EBUSY; |
---|
| 152 | + } else { |
---|
| 153 | + raw_spin_lock_irqsave(&qs->lock, flags); |
---|
| 154 | + } |
---|
145 | 155 | |
---|
146 | 156 | if (queue_stack_map_is_empty(qs)) { |
---|
147 | 157 | memset(value, 0, qs->map.value_size); |
---|
.. | .. |
---|
206 | 216 | if (flags & BPF_NOEXIST || flags > BPF_EXIST) |
---|
207 | 217 | return -EINVAL; |
---|
208 | 218 | |
---|
209 | | - raw_spin_lock_irqsave(&qs->lock, irq_flags); |
---|
| 219 | + if (in_nmi()) { |
---|
| 220 | + if (!raw_spin_trylock_irqsave(&qs->lock, irq_flags)) |
---|
| 221 | + return -EBUSY; |
---|
| 222 | + } else { |
---|
| 223 | + raw_spin_lock_irqsave(&qs->lock, irq_flags); |
---|
| 224 | + } |
---|
210 | 225 | |
---|
211 | 226 | if (queue_stack_map_is_full(qs)) { |
---|
212 | 227 | if (!replace) { |
---|