Skip to content

Commit ad9a125

Browse files
Jiri Pirkomstsirkin
authored andcommitted
virtio_pci: convert vp_*find_vqs() ops to find_vqs_info()
Convert existing vp_find_vqs() and vp_modern_find_vqs() implementations to find_vqs_info() config op. Signed-off-by: Jiri Pirko <[email protected]> Message-Id: <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]>
1 parent c502eb8 commit ad9a125

File tree

4 files changed

+32
-30
lines changed

4 files changed

+32
-30
lines changed

drivers/virtio/virtio_pci_common.c

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,13 @@ void vp_del_vqs(struct virtio_device *vdev)
285285
}
286286

287287
static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
288-
struct virtqueue *vqs[], vq_callback_t *callbacks[],
289-
const char * const names[], bool per_vq_vectors,
290-
const bool *ctx,
291-
struct irq_affinity *desc)
288+
struct virtqueue *vqs[],
289+
struct virtqueue_info vqs_info[],
290+
bool per_vq_vectors,
291+
struct irq_affinity *desc)
292292
{
293293
struct virtio_pci_device *vp_dev = to_vp_device(vdev);
294+
struct virtqueue_info *vqi;
294295
u16 msix_vec;
295296
int i, err, nvectors, allocated_vectors, queue_idx = 0;
296297

@@ -301,9 +302,11 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
301302
if (per_vq_vectors) {
302303
/* Best option: one for change interrupt, one per vq. */
303304
nvectors = 1;
304-
for (i = 0; i < nvqs; ++i)
305-
if (names[i] && callbacks[i])
305+
for (i = 0; i < nvqs; ++i) {
306+
vqi = &vqs_info[i];
307+
if (vqi->name && vqi->callback)
306308
++nvectors;
309+
}
307310
} else {
308311
/* Second best: one for change, shared for all vqs. */
309312
nvectors = 2;
@@ -317,20 +320,20 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
317320
vp_dev->per_vq_vectors = per_vq_vectors;
318321
allocated_vectors = vp_dev->msix_used_vectors;
319322
for (i = 0; i < nvqs; ++i) {
320-
if (!names[i]) {
323+
vqi = &vqs_info[i];
324+
if (!vqi->name) {
321325
vqs[i] = NULL;
322326
continue;
323327
}
324328

325-
if (!callbacks[i])
329+
if (!vqi->callback)
326330
msix_vec = VIRTIO_MSI_NO_VECTOR;
327331
else if (vp_dev->per_vq_vectors)
328332
msix_vec = allocated_vectors++;
329333
else
330334
msix_vec = VP_MSIX_VQ_VECTOR;
331-
vqs[i] = vp_setup_vq(vdev, queue_idx++, callbacks[i], names[i],
332-
ctx ? ctx[i] : false,
333-
msix_vec);
335+
vqs[i] = vp_setup_vq(vdev, queue_idx++, vqi->callback,
336+
vqi->name, vqi->ctx, msix_vec);
334337
if (IS_ERR(vqs[i])) {
335338
err = PTR_ERR(vqs[i]);
336339
goto error_find;
@@ -343,7 +346,7 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
343346
snprintf(vp_dev->msix_names[msix_vec],
344347
sizeof *vp_dev->msix_names,
345348
"%s-%s",
346-
dev_name(&vp_dev->vdev.dev), names[i]);
349+
dev_name(&vp_dev->vdev.dev), vqi->name);
347350
err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
348351
vring_interrupt, 0,
349352
vp_dev->msix_names[msix_vec],
@@ -361,8 +364,8 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
361364
}
362365

363366
static int vp_find_vqs_intx(struct virtio_device *vdev, unsigned int nvqs,
364-
struct virtqueue *vqs[], vq_callback_t *callbacks[],
365-
const char * const names[], const bool *ctx)
367+
struct virtqueue *vqs[],
368+
struct virtqueue_info vqs_info[])
366369
{
367370
struct virtio_pci_device *vp_dev = to_vp_device(vdev);
368371
int i, err, queue_idx = 0;
@@ -379,12 +382,14 @@ static int vp_find_vqs_intx(struct virtio_device *vdev, unsigned int nvqs,
379382
vp_dev->intx_enabled = 1;
380383
vp_dev->per_vq_vectors = false;
381384
for (i = 0; i < nvqs; ++i) {
382-
if (!names[i]) {
385+
struct virtqueue_info *vqi = &vqs_info[i];
386+
387+
if (!vqi->name) {
383388
vqs[i] = NULL;
384389
continue;
385390
}
386-
vqs[i] = vp_setup_vq(vdev, queue_idx++, callbacks[i], names[i],
387-
ctx ? ctx[i] : false,
391+
vqs[i] = vp_setup_vq(vdev, queue_idx++, vqi->callback,
392+
vqi->name, vqi->ctx,
388393
VIRTIO_MSI_NO_VECTOR);
389394
if (IS_ERR(vqs[i])) {
390395
err = PTR_ERR(vqs[i]);
@@ -400,25 +405,24 @@ static int vp_find_vqs_intx(struct virtio_device *vdev, unsigned int nvqs,
400405

401406
/* the config->find_vqs() implementation */
402407
int vp_find_vqs(struct virtio_device *vdev, unsigned int nvqs,
403-
struct virtqueue *vqs[], vq_callback_t *callbacks[],
404-
const char * const names[], const bool *ctx,
408+
struct virtqueue *vqs[], struct virtqueue_info vqs_info[],
405409
struct irq_affinity *desc)
406410
{
407411
int err;
408412

409413
/* Try MSI-X with one vector per queue. */
410-
err = vp_find_vqs_msix(vdev, nvqs, vqs, callbacks, names, true, ctx, desc);
414+
err = vp_find_vqs_msix(vdev, nvqs, vqs, vqs_info, true, desc);
411415
if (!err)
412416
return 0;
413417
/* Fallback: MSI-X with one vector for config, one shared for queues. */
414-
err = vp_find_vqs_msix(vdev, nvqs, vqs, callbacks, names, false, ctx, desc);
418+
err = vp_find_vqs_msix(vdev, nvqs, vqs, vqs_info, false, desc);
415419
if (!err)
416420
return 0;
417421
/* Is there an interrupt? If not give up. */
418422
if (!(to_vp_device(vdev)->pci_dev->irq))
419423
return err;
420424
/* Finally fall back to regular interrupts. */
421-
return vp_find_vqs_intx(vdev, nvqs, vqs, callbacks, names, ctx);
425+
return vp_find_vqs_intx(vdev, nvqs, vqs, vqs_info);
422426
}
423427

424428
const char *vp_bus_name(struct virtio_device *vdev)

drivers/virtio/virtio_pci_common.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,7 @@ bool vp_notify(struct virtqueue *vq);
127127
void vp_del_vqs(struct virtio_device *vdev);
128128
/* the config->find_vqs() implementation */
129129
int vp_find_vqs(struct virtio_device *vdev, unsigned int nvqs,
130-
struct virtqueue *vqs[], vq_callback_t *callbacks[],
131-
const char * const names[], const bool *ctx,
130+
struct virtqueue *vqs[], struct virtqueue_info vqs_info[],
132131
struct irq_affinity *desc);
133132
const char *vp_bus_name(struct virtio_device *vdev);
134133

drivers/virtio/virtio_pci_legacy.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ static const struct virtio_config_ops virtio_pci_config_ops = {
192192
.get_status = vp_get_status,
193193
.set_status = vp_set_status,
194194
.reset = vp_reset,
195-
.find_vqs = vp_find_vqs,
195+
.find_vqs_info = vp_find_vqs,
196196
.del_vqs = vp_del_vqs,
197197
.synchronize_cbs = vp_synchronize_vectors,
198198
.get_features = vp_get_features,

drivers/virtio/virtio_pci_modern.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -595,13 +595,12 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,
595595

596596
static int vp_modern_find_vqs(struct virtio_device *vdev, unsigned int nvqs,
597597
struct virtqueue *vqs[],
598-
vq_callback_t *callbacks[],
599-
const char * const names[], const bool *ctx,
598+
struct virtqueue_info vqs_info[],
600599
struct irq_affinity *desc)
601600
{
602601
struct virtio_pci_device *vp_dev = to_vp_device(vdev);
603602
struct virtqueue *vq;
604-
int rc = vp_find_vqs(vdev, nvqs, vqs, callbacks, names, ctx, desc);
603+
int rc = vp_find_vqs(vdev, nvqs, vqs, vqs_info, desc);
605604

606605
if (rc)
607606
return rc;
@@ -782,7 +781,7 @@ static const struct virtio_config_ops virtio_pci_config_nodev_ops = {
782781
.get_status = vp_get_status,
783782
.set_status = vp_set_status,
784783
.reset = vp_reset,
785-
.find_vqs = vp_modern_find_vqs,
784+
.find_vqs_info = vp_modern_find_vqs,
786785
.del_vqs = vp_del_vqs,
787786
.synchronize_cbs = vp_synchronize_vectors,
788787
.get_features = vp_get_features,
@@ -804,7 +803,7 @@ static const struct virtio_config_ops virtio_pci_config_ops = {
804803
.get_status = vp_get_status,
805804
.set_status = vp_set_status,
806805
.reset = vp_reset,
807-
.find_vqs = vp_modern_find_vqs,
806+
.find_vqs_info = vp_modern_find_vqs,
808807
.del_vqs = vp_del_vqs,
809808
.synchronize_cbs = vp_synchronize_vectors,
810809
.get_features = vp_get_features,

0 commit comments

Comments
 (0)