Merge tag 'for-linus-6.2-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 12 Jan 2023 23:02:20 +0000 (17:02 -0600)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 12 Jan 2023 23:02:20 +0000 (17:02 -0600)
Pull xen fixes from Juergen Gross:

 - two cleanup patches

 - a fix of a memory leak in the Xen pvfront driver

 - a fix of a locking issue in the Xen hypervisor console driver

* tag 'for-linus-6.2-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  xen/pvcalls: free active map buffer on pvcalls_front_free_map
  hvc/xen: lock console list traversal
  x86/xen: Remove the unused function p2m_index()
  xen: make remove callback of xen driver void returned

1  2 
drivers/block/xen-blkfront.c
drivers/net/xen-netfront.c
drivers/video/fbdev/xen-fbfront.c
drivers/xen/pvcalls-back.c
net/9p/trans_xen.c

index b28489290323faeeb74302570d4a971493c92c14,e68576ded7cb8c82ffa796e66ef5fb8b9a09f703..23ed258b57f0e585e122a60d6d4dba7cc2972f02
@@@ -2129,6 -2129,7 +2129,6 @@@ static void blkfront_closing(struct blk
        if (info->rq && info->gd) {
                blk_mq_stop_hw_queues(info->rq);
                blk_mark_disk_dead(info->gd);
 -              set_capacity(info->gd, 0);
        }
  
        for_each_rinfo(info, rinfo, i) {
@@@ -2467,7 -2468,7 +2467,7 @@@ static void blkback_changed(struct xenb
        }
  }
  
- static int blkfront_remove(struct xenbus_device *xbdev)
+ static void blkfront_remove(struct xenbus_device *xbdev)
  {
        struct blkfront_info *info = dev_get_drvdata(&xbdev->dev);
  
        }
  
        kfree(info);
-       return 0;
  }
  
  static int blkfront_is_ready(struct xenbus_device *dev)
index 14aec417fa063ee0c9e34394bbf90c261ba47c5e,bc17f5391b1a0b5904112094886fbf72f55385cd..12b074286df9daf8b83aa84cb62a2039d5d48019
@@@ -1392,16 -1392,16 +1392,16 @@@ static void xennet_get_stats64(struct n
                unsigned int start;
  
                do {
 -                      start = u64_stats_fetch_begin_irq(&tx_stats->syncp);
 +                      start = u64_stats_fetch_begin(&tx_stats->syncp);
                        tx_packets = tx_stats->packets;
                        tx_bytes = tx_stats->bytes;
 -              } while (u64_stats_fetch_retry_irq(&tx_stats->syncp, start));
 +              } while (u64_stats_fetch_retry(&tx_stats->syncp, start));
  
                do {
 -                      start = u64_stats_fetch_begin_irq(&rx_stats->syncp);
 +                      start = u64_stats_fetch_begin(&rx_stats->syncp);
                        rx_packets = rx_stats->packets;
                        rx_bytes = rx_stats->bytes;
 -              } while (u64_stats_fetch_retry_irq(&rx_stats->syncp, start));
 +              } while (u64_stats_fetch_retry(&rx_stats->syncp, start));
  
                tot->rx_packets += rx_packets;
                tot->tx_packets += tx_packets;
@@@ -1862,12 -1862,6 +1862,12 @@@ static int netfront_resume(struct xenbu
        netif_tx_unlock_bh(info->netdev);
  
        xennet_disconnect_backend(info);
 +
 +      rtnl_lock();
 +      if (info->queues)
 +              xennet_destroy_queues(info);
 +      rtnl_unlock();
 +
        return 0;
  }
  
@@@ -2646,7 -2640,7 +2646,7 @@@ static void xennet_bus_close(struct xen
        } while (!ret);
  }
  
- static int xennet_remove(struct xenbus_device *dev)
+ static void xennet_remove(struct xenbus_device *dev)
  {
        struct netfront_info *info = dev_get_drvdata(&dev->dev);
  
                rtnl_unlock();
        }
        xennet_free_netdev(info->netdev);
-       return 0;
  }
  
  static const struct xenbus_device_id netfront_ids[] = {
index 8752d389e3823f5ec81ee5fc35d268b87b22e0de,ae8a50ecdbd3a89ed2a5c6951c23a24909edd653..d7f3e6281ce48051b74b97a047c4fabda6a322f1
@@@ -67,7 -67,7 +67,7 @@@ MODULE_PARM_DESC(video
        "Video memory size in MB, width, height in pixels (default 2,800,600)");
  
  static void xenfb_make_preferred_console(void);
- static int xenfb_remove(struct xenbus_device *);
+ static void xenfb_remove(struct xenbus_device *);
  static void xenfb_init_shared_page(struct xenfb_info *, struct fb_info *);
  static int xenfb_connect_backend(struct xenbus_device *, struct xenfb_info *);
  static void xenfb_disconnect_backend(struct xenfb_info *);
@@@ -504,14 -504,18 +504,14 @@@ static void xenfb_make_preferred_consol
        if (console_set_on_cmdline)
                return;
  
 -      console_lock();
 +      console_list_lock();
        for_each_console(c) {
                if (!strcmp(c->name, "tty") && c->index == 0)
                        break;
        }
 -      console_unlock();
 -      if (c) {
 -              unregister_console(c);
 -              c->flags |= CON_CONSDEV;
 -              c->flags &= ~CON_PRINTBUFFER; /* don't print again */
 -              register_console(c);
 -      }
 +      if (c)
 +              console_force_preferred_locked(c);
 +      console_list_unlock();
  }
  
  static int xenfb_resume(struct xenbus_device *dev)
        return xenfb_connect_backend(dev, info);
  }
  
- static int xenfb_remove(struct xenbus_device *dev)
+ static void xenfb_remove(struct xenbus_device *dev)
  {
        struct xenfb_info *info = dev_get_drvdata(&dev->dev);
  
        vfree(info->gfns);
        vfree(info->fb);
        kfree(info);
-       return 0;
  }
  
  static unsigned long vmalloc_to_gfn(void *address)
index 28b2a1fa25ab5836586de8989431bf5661df418c,ea52a2092bb82d843ba3afc4bfe3964b74cd0724..0d4f8f4f494888898c759d0f14ddc28f594cdabc
@@@ -129,13 -129,13 +129,13 @@@ static bool pvcalls_conn_back_read(voi
        if (masked_prod < masked_cons) {
                vec[0].iov_base = data->in + masked_prod;
                vec[0].iov_len = wanted;
 -              iov_iter_kvec(&msg.msg_iter, WRITE, vec, 1, wanted);
 +              iov_iter_kvec(&msg.msg_iter, ITER_DEST, vec, 1, wanted);
        } else {
                vec[0].iov_base = data->in + masked_prod;
                vec[0].iov_len = array_size - masked_prod;
                vec[1].iov_base = data->in;
                vec[1].iov_len = wanted - vec[0].iov_len;
 -              iov_iter_kvec(&msg.msg_iter, WRITE, vec, 2, wanted);
 +              iov_iter_kvec(&msg.msg_iter, ITER_DEST, vec, 2, wanted);
        }
  
        atomic_set(&map->read, 0);
@@@ -188,13 -188,13 +188,13 @@@ static bool pvcalls_conn_back_write(str
        if (pvcalls_mask(prod, array_size) > pvcalls_mask(cons, array_size)) {
                vec[0].iov_base = data->out + pvcalls_mask(cons, array_size);
                vec[0].iov_len = size;
 -              iov_iter_kvec(&msg.msg_iter, READ, vec, 1, size);
 +              iov_iter_kvec(&msg.msg_iter, ITER_SOURCE, vec, 1, size);
        } else {
                vec[0].iov_base = data->out + pvcalls_mask(cons, array_size);
                vec[0].iov_len = array_size - pvcalls_mask(cons, array_size);
                vec[1].iov_base = data->out;
                vec[1].iov_len = size - vec[0].iov_len;
 -              iov_iter_kvec(&msg.msg_iter, READ, vec, 2, size);
 +              iov_iter_kvec(&msg.msg_iter, ITER_SOURCE, vec, 2, size);
        }
  
        atomic_set(&map->write, 0);
@@@ -1181,9 -1181,8 +1181,8 @@@ static void pvcalls_back_changed(struc
        }
  }
  
- static int pvcalls_back_remove(struct xenbus_device *dev)
+ static void pvcalls_back_remove(struct xenbus_device *dev)
  {
-       return 0;
  }
  
  static int pvcalls_back_uevent(struct xenbus_device *xdev,
diff --combined net/9p/trans_xen.c
index 9630b1275557978dd45a5e4a0322192bbc30af42,9950e1a5acb740c4189474c997b941e970b14008..82c7005ede65679bd528637ff029573a03e7776e
@@@ -157,7 -157,7 +157,7 @@@ again
                              &masked_prod, masked_cons,
                              XEN_9PFS_RING_SIZE(ring));
  
 -      p9_req->status = REQ_STATUS_SENT;
 +      WRITE_ONCE(p9_req->status, REQ_STATUS_SENT);
        virt_wmb();                     /* write ring before updating pointer */
        prod += size;
        ring->intf->out_prod = prod;
@@@ -212,13 -212,11 +212,13 @@@ static void p9_xen_response(struct work
                        dev_warn(&priv->dev->dev,
                                 "requested packet size too big: %d for tag %d with capacity %zd\n",
                                 h.size, h.tag, req->rc.capacity);
 -                      req->status = REQ_STATUS_ERROR;
 +                      WRITE_ONCE(req->status, REQ_STATUS_ERROR);
                        goto recv_error;
                }
  
 -              memcpy(&req->rc, &h, sizeof(h));
 +              req->rc.size = h.size;
 +              req->rc.id = h.id;
 +              req->rc.tag = h.tag;
                req->rc.offset = 0;
  
                masked_cons = xen_9pfs_mask(cons, XEN_9PFS_RING_SIZE(ring));
@@@ -305,13 -303,12 +305,12 @@@ static void xen_9pfs_front_free(struct 
        kfree(priv);
  }
  
- static int xen_9pfs_front_remove(struct xenbus_device *dev)
+ static void xen_9pfs_front_remove(struct xenbus_device *dev)
  {
        struct xen_9pfs_front_priv *priv = dev_get_drvdata(&dev->dev);
  
        dev_set_drvdata(&dev->dev, NULL);
        xen_9pfs_front_free(priv);
-       return 0;
  }
  
  static int xen_9pfs_front_alloc_dataring(struct xenbus_device *dev,