Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost

Pull virtio regression fixes from Michael Tsirkin:
"Fixes two issues in the latest kernel"

* tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
virtio_mmio: fix devm cleanup
ptr_ring: fix up after recent ptr_ring changes

+32 -40
+9 -34
drivers/virtio/virtio_mmio.c
··· 522 522 return -EBUSY; 523 523 524 524 vm_dev = devm_kzalloc(&pdev->dev, sizeof(*vm_dev), GFP_KERNEL); 525 - if (!vm_dev) { 526 - rc = -ENOMEM; 527 - goto free_mem; 528 - } 525 + if (!vm_dev) 526 + return -ENOMEM; 529 527 530 528 vm_dev->vdev.dev.parent = &pdev->dev; 531 529 vm_dev->vdev.dev.release = virtio_mmio_release_dev; ··· 533 535 spin_lock_init(&vm_dev->lock); 534 536 535 537 vm_dev->base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem)); 536 - if (vm_dev->base == NULL) { 537 - rc = -EFAULT; 538 - goto free_vmdev; 539 - } 538 + if (vm_dev->base == NULL) 539 + return -EFAULT; 540 540 541 541 /* Check magic value */ 542 542 magic = readl(vm_dev->base + VIRTIO_MMIO_MAGIC_VALUE); 543 543 if (magic != ('v' | 'i' << 8 | 'r' << 16 | 't' << 24)) { 544 544 dev_warn(&pdev->dev, "Wrong magic value 0x%08lx!\n", magic); 545 - rc = -ENODEV; 546 - goto unmap; 545 + return -ENODEV; 547 546 } 548 547 549 548 /* Check device version */ ··· 548 553 if (vm_dev->version < 1 || vm_dev->version > 2) { 549 554 dev_err(&pdev->dev, "Version %ld not supported!\n", 550 555 vm_dev->version); 551 - rc = -ENXIO; 552 - goto unmap; 556 + return -ENXIO; 553 557 } 554 558 555 559 vm_dev->vdev.id.device = readl(vm_dev->base + VIRTIO_MMIO_DEVICE_ID); ··· 557 563 * virtio-mmio device with an ID 0 is a (dummy) placeholder 558 564 * with no function. End probing now with no error reported. 559 565 */ 560 - rc = -ENODEV; 561 - goto unmap; 566 + return -ENODEV; 562 567 } 563 568 vm_dev->vdev.id.vendor = readl(vm_dev->base + VIRTIO_MMIO_VENDOR_ID); 564 569 ··· 583 590 platform_set_drvdata(pdev, vm_dev); 584 591 585 592 rc = register_virtio_device(&vm_dev->vdev); 586 - if (rc) { 587 - iounmap(vm_dev->base); 588 - devm_release_mem_region(&pdev->dev, mem->start, 589 - resource_size(mem)); 593 + if (rc) 590 594 put_device(&vm_dev->vdev.dev); 591 - } 592 - return rc; 593 - unmap: 594 - iounmap(vm_dev->base); 595 - free_mem: 596 - devm_release_mem_region(&pdev->dev, mem->start, 597 - resource_size(mem)); 598 - free_vmdev: 599 - devm_kfree(&pdev->dev, vm_dev); 595 + 600 596 return rc; 601 597 } 602 598 603 599 static int virtio_mmio_remove(struct platform_device *pdev) 604 600 { 605 601 struct virtio_mmio_device *vm_dev = platform_get_drvdata(pdev); 606 - struct resource *mem; 607 - 608 - iounmap(vm_dev->base); 609 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 610 - if (mem) 611 - devm_release_mem_region(&pdev->dev, mem->start, 612 - resource_size(mem)); 613 602 unregister_virtio_device(&vm_dev->vdev); 614 603 615 604 return 0;
+23 -6
tools/virtio/ringtest/ptr_ring.c
··· 16 16 #define unlikely(x) (__builtin_expect(!!(x), 0)) 17 17 #define likely(x) (__builtin_expect(!!(x), 1)) 18 18 #define ALIGN(x, a) (((x) + (a) - 1) / (a) * (a)) 19 + #define SIZE_MAX (~(size_t)0) 20 + 19 21 typedef pthread_spinlock_t spinlock_t; 20 22 21 23 typedef int gfp_t; 22 - static void *kmalloc(unsigned size, gfp_t gfp) 23 - { 24 - return memalign(64, size); 25 - } 24 + #define __GFP_ZERO 0x1 26 25 27 - static void *kzalloc(unsigned size, gfp_t gfp) 26 + static void *kmalloc(unsigned size, gfp_t gfp) 28 27 { 29 28 void *p = memalign(64, size); 30 29 if (!p) 31 30 return p; 32 - memset(p, 0, size); 33 31 32 + if (gfp & __GFP_ZERO) 33 + memset(p, 0, size); 34 34 return p; 35 + } 36 + 37 + static inline void *kzalloc(unsigned size, gfp_t flags) 38 + { 39 + return kmalloc(size, flags | __GFP_ZERO); 40 + } 41 + 42 + static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags) 43 + { 44 + if (size != 0 && n > SIZE_MAX / size) 45 + return NULL; 46 + return kmalloc(n * size, flags); 47 + } 48 + 49 + static inline void *kcalloc(size_t n, size_t size, gfp_t flags) 50 + { 51 + return kmalloc_array(n, size, flags | __GFP_ZERO); 35 52 } 36 53 37 54 static void kfree(void *p)