hyperv-fixes for 5.17-rc5
-----BEGIN PGP SIGNATURE----- iQFHBAABCAAxFiEEIbPD0id6easf0xsudhRwX5BBoF4FAmILjZgTHHdlaS5saXVA a2VybmVsLm9yZwAKCRB2FHBfkEGgXuPAB/96ls6ZaUrvAEseODu9N+qbCKCjqjGx LBqP5gzzG71LoFLlvvGp7quwDXkSlfzMmZM1oxBrsRN4TiexdQ4b9tR2jNqxUBS0 pR7efRpR4YN1TrvxCr0lgfbKV6F3EC4YqMwK2Tf7zMRkzAbMQmw500JTkAdtplUT opSZKlWt1Q66Iudz7vwz2e2D/NnAg03icB7lZUNulV1WTDfDfBUZyAphAnOqpty9 Y9UlVjFYSozOA6dv3HClYiJPjxhzUev88W/Sld81+2+gGCngWRT4a2OyUvCqNWXD P8EswLHuqECpkz6uxnbQOLDBgdiMXigtANNky/E4Za8r9MqpZT3+ueLf =/jBG -----END PGP SIGNATURE----- Merge tag 'hyperv-fixes-signed-20220215' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux Pull hyperv fixes from Wei Liu: - Rework use of DMA_BIT_MASK in vmbus to work around a clang bug (Michael Kelley) - Fix NUMA topology (Long Li) - Fix a memory leak in vmbus (Miaoqian Lin) - One minor clean-up patch (Cai Huoqing) * tag 'hyperv-fixes-signed-20220215' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux: Drivers: hv: utils: Make use of the helper macro LIST_HEAD() Drivers: hv: vmbus: Rework use of DMA_BIT_MASK(64) Drivers: hv: vmbus: Fix memory leak in vmbus_add_channel_kobj PCI: hv: Fix NUMA node assignment when kernel boots with custom NUMA topology
This commit is contained in:
commit
c24449b321
@ -13,7 +13,7 @@
|
|||||||
#include "hv_utils_transport.h"
|
#include "hv_utils_transport.h"
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(hvt_list_lock);
|
static DEFINE_SPINLOCK(hvt_list_lock);
|
||||||
static struct list_head hvt_list = LIST_HEAD_INIT(hvt_list);
|
static LIST_HEAD(hvt_list);
|
||||||
|
|
||||||
static void hvt_reset(struct hvutil_transport *hvt)
|
static void hvt_reset(struct hvutil_transport *hvt)
|
||||||
{
|
{
|
||||||
|
@ -2028,8 +2028,10 @@ int vmbus_add_channel_kobj(struct hv_device *dev, struct vmbus_channel *channel)
|
|||||||
kobj->kset = dev->channels_kset;
|
kobj->kset = dev->channels_kset;
|
||||||
ret = kobject_init_and_add(kobj, &vmbus_chan_ktype, NULL,
|
ret = kobject_init_and_add(kobj, &vmbus_chan_ktype, NULL,
|
||||||
"%u", relid);
|
"%u", relid);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
kobject_put(kobj);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = sysfs_create_group(kobj, &vmbus_chan_group);
|
ret = sysfs_create_group(kobj, &vmbus_chan_group);
|
||||||
|
|
||||||
@ -2038,6 +2040,7 @@ int vmbus_add_channel_kobj(struct hv_device *dev, struct vmbus_channel *channel)
|
|||||||
* The calling functions' error handling paths will cleanup the
|
* The calling functions' error handling paths will cleanup the
|
||||||
* empty channel directory.
|
* empty channel directory.
|
||||||
*/
|
*/
|
||||||
|
kobject_put(kobj);
|
||||||
dev_err(device, "Unable to set up channel sysfs files\n");
|
dev_err(device, "Unable to set up channel sysfs files\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2079,7 +2082,6 @@ struct hv_device *vmbus_device_create(const guid_t *type,
|
|||||||
return child_device_obj;
|
return child_device_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 vmbus_dma_mask = DMA_BIT_MASK(64);
|
|
||||||
/*
|
/*
|
||||||
* vmbus_device_register - Register the child device
|
* vmbus_device_register - Register the child device
|
||||||
*/
|
*/
|
||||||
@ -2120,8 +2122,9 @@ int vmbus_device_register(struct hv_device *child_device_obj)
|
|||||||
}
|
}
|
||||||
hv_debug_add_dev_dir(child_device_obj);
|
hv_debug_add_dev_dir(child_device_obj);
|
||||||
|
|
||||||
child_device_obj->device.dma_mask = &vmbus_dma_mask;
|
|
||||||
child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
|
child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
|
||||||
|
child_device_obj->device.dma_mask = &child_device_obj->dma_mask;
|
||||||
|
dma_set_mask(&child_device_obj->device, DMA_BIT_MASK(64));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_kset_unregister:
|
err_kset_unregister:
|
||||||
|
@ -2155,8 +2155,17 @@ static void hv_pci_assign_numa_node(struct hv_pcibus_device *hbus)
|
|||||||
if (!hv_dev)
|
if (!hv_dev)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (hv_dev->desc.flags & HV_PCI_DEVICE_FLAG_NUMA_AFFINITY)
|
if (hv_dev->desc.flags & HV_PCI_DEVICE_FLAG_NUMA_AFFINITY &&
|
||||||
set_dev_node(&dev->dev, hv_dev->desc.virtual_numa_node);
|
hv_dev->desc.virtual_numa_node < num_possible_nodes())
|
||||||
|
/*
|
||||||
|
* The kernel may boot with some NUMA nodes offline
|
||||||
|
* (e.g. in a KDUMP kernel) or with NUMA disabled via
|
||||||
|
* "numa=off". In those cases, adjust the host provided
|
||||||
|
* NUMA node to a valid NUMA node used by the kernel.
|
||||||
|
*/
|
||||||
|
set_dev_node(&dev->dev,
|
||||||
|
numa_map_to_online_node(
|
||||||
|
hv_dev->desc.virtual_numa_node));
|
||||||
|
|
||||||
put_pcichild(hv_dev);
|
put_pcichild(hv_dev);
|
||||||
}
|
}
|
||||||
|
@ -1262,6 +1262,7 @@ struct hv_device {
|
|||||||
struct vmbus_channel *channel;
|
struct vmbus_channel *channel;
|
||||||
struct kset *channels_kset;
|
struct kset *channels_kset;
|
||||||
struct device_dma_parameters dma_parms;
|
struct device_dma_parameters dma_parms;
|
||||||
|
u64 dma_mask;
|
||||||
|
|
||||||
/* place holder to keep track of the dir for hv device in debugfs */
|
/* place holder to keep track of the dir for hv device in debugfs */
|
||||||
struct dentry *debug_dir;
|
struct dentry *debug_dir;
|
||||||
|
Loading…
Reference in New Issue
Block a user