History

Drivers: hv: vmbus: Introduce {lock,unlock}_requestor()

To abtract the lock and unlock operations on the requestor spin lock. The helpers will come in handy in hv_pci. No functional change.

Andrea Parri (Microsoft) committed 4 years ago

Commit b91eaf71 parent 0aadb6a2 files · +20 −6Browse files

Unified · Split

2 files
  1. drivers/hv/channel.c +5 −6
  2. include/linux/hyperv.h +15 −0
drivers/hv/channel.c+5−6
@@ -1252,12 +1252,12 @@ u64 vmbus_next_request_id(struct vmbus_channel *channel, u64 rqst_addr) · 1251 unmodified lines
12521252 if (!channel->rqstor_size)
12531253 return VMBUS_NO_RQSTOR;
12541254
1255− spin_lock_irqsave(&rqstor->req_lock, flags);
1255+ lock_requestor(channel, flags);
12561256 current_id = rqstor->next_request_id;
12571257
12581258 /* Requestor array is full */
12591259 if (current_id >= rqstor->size) {
1260− spin_unlock_irqrestore(&rqstor->req_lock, flags);
1260+ unlock_requestor(channel, flags);
12611261 return VMBUS_RQST_ERROR;
12621262 }
12631263
@@ -1267,7 +1267,7 @@ u64 vmbus_next_request_id(struct vmbus_channel *channel, u64 rqst_addr) · 3 unmodified lines
12671267 /* The already held spin lock provides atomicity */
12681268 bitmap_set(rqstor->req_bitmap, current_id, 1);
12691269
1270− spin_unlock_irqrestore(&rqstor->req_lock, flags);
1270+ unlock_requestor(channel, flags);
12711271
12721272 /*
12731273 * Cannot return an ID of 0, which is reserved for an unsolicited
@@ -1327,13 +1327,12 @@ EXPORT_SYMBOL_GPL(__vmbus_request_addr_match); · 53 unmodified lines
13271327 u64 vmbus_request_addr_match(struct vmbus_channel *channel, u64 trans_id,
13281328 u64 rqst_addr)
13291329 {
1330− struct vmbus_requestor *rqstor = &channel->requestor;
13311330 unsigned long flags;
13321331 u64 req_addr;
13331332
1334− spin_lock_irqsave(&rqstor->req_lock, flags);
1333+ lock_requestor(channel, flags);
13351334 req_addr = __vmbus_request_addr_match(channel, trans_id, rqst_addr);
1336− spin_unlock_irqrestore(&rqstor->req_lock, flags);
1335+ unlock_requestor(channel, flags);
13371336
13381337 return req_addr;
13391338 }
include/linux/hyperv.h+15−0
@@ -1042,6 +1042,21 @@ struct vmbus_channel { · 1041 unmodified lines
10421042 u32 max_pkt_size;
10431043 };
10441044
1045+#define lock_requestor(channel, flags) \
1046+do { \
1047+ struct vmbus_requestor *rqstor = &(channel)->requestor; \
1048+ \
1049+ spin_lock_irqsave(&rqstor->req_lock, flags); \
1050+} while (0)
1051+
1052+static __always_inline void unlock_requestor(struct vmbus_channel *channel,
1053+ unsigned long flags)
1054+{
1055+ struct vmbus_requestor *rqstor = &channel->requestor;
1056+
1057+ spin_unlock_irqrestore(&rqstor->req_lock, flags);
1058+}
1059+
10451060 u64 vmbus_next_request_id(struct vmbus_channel *channel, u64 rqst_addr);
10461061 u64 __vmbus_request_addr_match(struct vmbus_channel *channel, u64 trans_id,
10471062 u64 rqst_addr);