Drivers: hv: vmbus: Introduce {lock,unlock}_requestor()
authorAndrea Parri (Microsoft) <parri.andrea@gmail.com>
Tue, 19 Apr 2022 12:23:24 +0000 (14:23 +0200)
committerWei Liu <wei.liu@kernel.org>
Mon, 25 Apr 2022 15:51:13 +0000 (15:51 +0000)
To abtract the lock and unlock operations on the requestor spin lock.
The helpers will come in handy in hv_pci.

No functional change.

Suggested-by: Michael Kelley <mikelley@microsoft.com>
Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@gmail.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/20220419122325.10078-6-parri.andrea@gmail.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
drivers/hv/channel.c
include/linux/hyperv.h

index 49f10a603a0914bf472030be03d930c088262e4f..56f7e06c673e4236ba8d1e01957723a800af63a0 100644 (file)
@@ -1252,12 +1252,12 @@ u64 vmbus_next_request_id(struct vmbus_channel *channel, u64 rqst_addr)
        if (!channel->rqstor_size)
                return VMBUS_NO_RQSTOR;
 
-       spin_lock_irqsave(&rqstor->req_lock, flags);
+       lock_requestor(channel, flags);
        current_id = rqstor->next_request_id;
 
        /* Requestor array is full */
        if (current_id >= rqstor->size) {
-               spin_unlock_irqrestore(&rqstor->req_lock, flags);
+               unlock_requestor(channel, flags);
                return VMBUS_RQST_ERROR;
        }
 
@@ -1267,7 +1267,7 @@ u64 vmbus_next_request_id(struct vmbus_channel *channel, u64 rqst_addr)
        /* The already held spin lock provides atomicity */
        bitmap_set(rqstor->req_bitmap, current_id, 1);
 
-       spin_unlock_irqrestore(&rqstor->req_lock, flags);
+       unlock_requestor(channel, flags);
 
        /*
         * Cannot return an ID of 0, which is reserved for an unsolicited
@@ -1327,13 +1327,12 @@ EXPORT_SYMBOL_GPL(__vmbus_request_addr_match);
 u64 vmbus_request_addr_match(struct vmbus_channel *channel, u64 trans_id,
                             u64 rqst_addr)
 {
-       struct vmbus_requestor *rqstor = &channel->requestor;
        unsigned long flags;
        u64 req_addr;
 
-       spin_lock_irqsave(&rqstor->req_lock, flags);
+       lock_requestor(channel, flags);
        req_addr = __vmbus_request_addr_match(channel, trans_id, rqst_addr);
-       spin_unlock_irqrestore(&rqstor->req_lock, flags);
+       unlock_requestor(channel, flags);
 
        return req_addr;
 }
index 2e4962a2fbec41f574edfe08be07b8bee2c8b5f8..460a716f47486f92369a32c778261b031cd1ddf5 100644 (file)
@@ -1042,6 +1042,21 @@ struct vmbus_channel {
        u32 max_pkt_size;
 };
 
+#define lock_requestor(channel, flags)                                 \
+do {                                                                   \
+       struct vmbus_requestor *rqstor = &(channel)->requestor;         \
+                                                                       \
+       spin_lock_irqsave(&rqstor->req_lock, flags);                    \
+} while (0)
+
+static __always_inline void unlock_requestor(struct vmbus_channel *channel,
+                                            unsigned long flags)
+{
+       struct vmbus_requestor *rqstor = &channel->requestor;
+
+       spin_unlock_irqrestore(&rqstor->req_lock, flags);
+}
+
 u64 vmbus_next_request_id(struct vmbus_channel *channel, u64 rqst_addr);
 u64 __vmbus_request_addr_match(struct vmbus_channel *channel, u64 trans_id,
                               u64 rqst_addr);