[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <514FFC06.9030703@acm.org>
Date: Mon, 25 Mar 2013 08:25:58 +0100
From: Bart Van Assche <bvanassche@....org>
To: Wanlong Gao <gaowanlong@...fujitsu.com>
CC: linux-kernel@...r.kernel.org, kvm@...r.kernel.org,
linux-scsi@...r.kernel.org,
virtualization@...ts.linux-foundation.org, rusty@...tcorp.com.au,
mst@...hat.com, asias@...hat.com, JBottomley@...allels.com,
venkateshs@...gle.com, pbonzini@...hat.com
Subject: Re: [PATCH V7 4/5] virtio-scsi: introduce multiqueue support
On 03/23/13 12:28, Wanlong Gao wrote:
> +static struct virtio_scsi_vq *virtscsi_pick_vq(struct virtio_scsi *vscsi,
> + struct virtio_scsi_target_state *tgt)
> +{
> + struct virtio_scsi_vq *vq;
> + unsigned long flags;
> + u32 queue_num;
> +
> + spin_lock_irqsave(&tgt->tgt_lock, flags);
> +
> + /*
> + * The memory barrier after atomic_inc_return matches
> + * the smp_read_barrier_depends() in virtscsi_req_done.
> + */
> + if (atomic_inc_return(&tgt->reqs) > 1)
> + vq = ACCESS_ONCE(tgt->req_vq);
> + else {
> + queue_num = smp_processor_id();
> + while (unlikely(queue_num >= vscsi->num_queues))
> + queue_num -= vscsi->num_queues;
> +
> + tgt->req_vq = vq = &vscsi->req_vqs[queue_num];
> + }
> +
> + spin_unlock_irqrestore(&tgt->tgt_lock, flags);
> + return vq;
> +}
Is there any reason why the smp_processor_id() % vscsi->num_queues
computation in virtscsi_pick_vq() has been implemented as a loop instead
of as an arithmetic operation ? If so, I would appreciate it if that
could be explained in a comment.
Thanks,
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists