Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41e05a12 authored by Heiko Carstens's avatar Heiko Carstens Committed by James Bottomley
Browse files

[SCSI] zfcp: optimize zfcp_qdio_account



Remove expensive ktime_get()/ktime_us_delta() functions from the hot
path and use get_clock_monotonic() instead. This elimates seven
function calls and avoids a lot of unnecessary calculations.

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent b592e89a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -438,7 +438,7 @@ struct zfcp_qdio {
	struct zfcp_qdio_queue	req_q;
	spinlock_t		stat_lock;
	spinlock_t		req_q_lock;
	ktime_t			req_q_time;
	unsigned long long	req_q_time;
	u64			req_q_util;
	atomic_t		req_q_full;
	wait_queue_head_t	req_q_wq;
+5 −6
Original line number Diff line number Diff line
@@ -56,16 +56,15 @@ static void zfcp_qdio_zero_sbals(struct qdio_buffer *sbal[], int first, int cnt)
}

/* this needs to be called prior to updating the queue fill level */
static void zfcp_qdio_account(struct zfcp_qdio *qdio)
static inline void zfcp_qdio_account(struct zfcp_qdio *qdio)
{
	ktime_t now;
	s64 span;
	unsigned long long now, span;
	int free, used;

	spin_lock(&qdio->stat_lock);
	now = ktime_get();
	span = ktime_us_delta(now, qdio->req_q_time);
	free = max(0, atomic_read(&qdio->req_q.count));
	now = get_clock_monotonic();
	span = (now - qdio->req_q_time) >> 12;
	free = atomic_read(&qdio->req_q.count);
	used = QDIO_MAX_BUFFERS_PER_Q - free;
	qdio->req_q_util += used * span;
	qdio->req_q_time = now;