Loading drivers/platform/msm/msm_bus/msm_bus_adhoc.h +3 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ struct link_node { int next; struct device *next_dev; struct list_head link; uint32_t free; uint32_t in_use; }; /* New types introduced for adhoc topology */ Loading Loading @@ -99,6 +99,8 @@ int msm_bus_update_clks(struct msm_bus_node_device_type *nodedev, int msm_bus_commit_data(int *dirty_nodes, int ctx, int num_dirty); int msm_bus_update_bw(struct msm_bus_node_device_type *nodedev, int ctx, int64_t add_bw, int **dirty_nodes, int *num_dirty); void *msm_bus_realloc_devmem(struct device *dev, void *p, size_t old_size, size_t new_size, gfp_t flags); extern struct msm_bus_device_node_registration *msm_bus_of_to_pdata(struct platform_device *pdev); Loading drivers/platform/msm/msm_bus/msm_bus_arb_adhoc.c +21 −9 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "msm_bus_adhoc.h" #define NUM_CL_HANDLES 50 #define NUM_LNODES 3 struct bus_search_type { struct list_head link; Loading Loading @@ -91,14 +92,15 @@ static int gen_lnode(struct device *dev, if (!cur_dev->num_lnodes) { cur_dev->lnode_list = devm_kzalloc(dev, sizeof(struct link_node), GFP_KERNEL); sizeof(struct link_node) * NUM_LNODES, GFP_KERNEL); lnode = cur_dev->lnode_list; cur_dev->num_lnodes++; cur_dev->num_lnodes = NUM_LNODES; lnode_idx = 0; } else { int i; for (i = 0; i < cur_dev->num_lnodes; i++) { if (cur_dev->lnode_list[i].free) if (!cur_dev->lnode_list[i].in_use) break; } Loading @@ -107,17 +109,27 @@ static int gen_lnode(struct device *dev, lnode_idx = i; } else { struct link_node *realloc_list; cur_dev->num_lnodes++; realloc_list = krealloc(cur_dev->lnode_list, size_t cur_size = sizeof(struct link_node) * cur_dev->num_lnodes; cur_dev->num_lnodes += NUM_LNODES; realloc_list = msm_bus_realloc_devmem( dev, cur_dev->lnode_list, cur_size, sizeof(struct link_node) * cur_dev->num_lnodes, GFP_KERNEL); if (!realloc_list) goto exit_gen_lnode; cur_dev->lnode_list = realloc_list; lnode = &cur_dev->lnode_list[(cur_dev->num_lnodes - 1)]; lnode_idx = (cur_dev->num_lnodes - 1); lnode = &cur_dev->lnode_list[i]; lnode_idx = i; } } lnode->free = 0; lnode->in_use = 1; if (next_hop == cur_dev->node_info->id) { lnode->next = -1; lnode->next_dev = NULL; Loading Loading @@ -157,7 +169,7 @@ static int remove_lnode(struct msm_bus_node_device_type *cur_dev, cur_dev->lnode_list[lnode_idx].next = -1; cur_dev->lnode_list[lnode_idx].next_dev = NULL; cur_dev->lnode_list[lnode_idx].free = 1; cur_dev->lnode_list[lnode_idx].in_use = 0; } exit_remove_lnode: Loading drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +27 −0 Original line number Diff line number Diff line Loading @@ -281,6 +281,33 @@ int msm_bus_commit_data(int *dirty_nodes, int ctx, int num_dirty) return ret; } void *msm_bus_realloc_devmem(struct device *dev, void *p, size_t old_size, size_t new_size, gfp_t flags) { void *ret; size_t copy_size = old_size; if (!new_size) { devm_kfree(dev, p); return ZERO_SIZE_PTR; } if (new_size < old_size) copy_size = new_size; ret = devm_kzalloc(dev, new_size, flags); if (!ret) { MSM_BUS_ERR("%s: Error Reallocating memory", __func__); goto exit_realloc_devmem; } memcpy(ret, p, copy_size); devm_kfree(dev, p); exit_realloc_devmem: return ret; } static int add_dirty_node(int **dirty_nodes, int id, int *num_dirty) { int i; Loading Loading
drivers/platform/msm/msm_bus/msm_bus_adhoc.h +3 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ struct link_node { int next; struct device *next_dev; struct list_head link; uint32_t free; uint32_t in_use; }; /* New types introduced for adhoc topology */ Loading Loading @@ -99,6 +99,8 @@ int msm_bus_update_clks(struct msm_bus_node_device_type *nodedev, int msm_bus_commit_data(int *dirty_nodes, int ctx, int num_dirty); int msm_bus_update_bw(struct msm_bus_node_device_type *nodedev, int ctx, int64_t add_bw, int **dirty_nodes, int *num_dirty); void *msm_bus_realloc_devmem(struct device *dev, void *p, size_t old_size, size_t new_size, gfp_t flags); extern struct msm_bus_device_node_registration *msm_bus_of_to_pdata(struct platform_device *pdev); Loading
drivers/platform/msm/msm_bus/msm_bus_arb_adhoc.c +21 −9 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include "msm_bus_adhoc.h" #define NUM_CL_HANDLES 50 #define NUM_LNODES 3 struct bus_search_type { struct list_head link; Loading Loading @@ -91,14 +92,15 @@ static int gen_lnode(struct device *dev, if (!cur_dev->num_lnodes) { cur_dev->lnode_list = devm_kzalloc(dev, sizeof(struct link_node), GFP_KERNEL); sizeof(struct link_node) * NUM_LNODES, GFP_KERNEL); lnode = cur_dev->lnode_list; cur_dev->num_lnodes++; cur_dev->num_lnodes = NUM_LNODES; lnode_idx = 0; } else { int i; for (i = 0; i < cur_dev->num_lnodes; i++) { if (cur_dev->lnode_list[i].free) if (!cur_dev->lnode_list[i].in_use) break; } Loading @@ -107,17 +109,27 @@ static int gen_lnode(struct device *dev, lnode_idx = i; } else { struct link_node *realloc_list; cur_dev->num_lnodes++; realloc_list = krealloc(cur_dev->lnode_list, size_t cur_size = sizeof(struct link_node) * cur_dev->num_lnodes; cur_dev->num_lnodes += NUM_LNODES; realloc_list = msm_bus_realloc_devmem( dev, cur_dev->lnode_list, cur_size, sizeof(struct link_node) * cur_dev->num_lnodes, GFP_KERNEL); if (!realloc_list) goto exit_gen_lnode; cur_dev->lnode_list = realloc_list; lnode = &cur_dev->lnode_list[(cur_dev->num_lnodes - 1)]; lnode_idx = (cur_dev->num_lnodes - 1); lnode = &cur_dev->lnode_list[i]; lnode_idx = i; } } lnode->free = 0; lnode->in_use = 1; if (next_hop == cur_dev->node_info->id) { lnode->next = -1; lnode->next_dev = NULL; Loading Loading @@ -157,7 +169,7 @@ static int remove_lnode(struct msm_bus_node_device_type *cur_dev, cur_dev->lnode_list[lnode_idx].next = -1; cur_dev->lnode_list[lnode_idx].next_dev = NULL; cur_dev->lnode_list[lnode_idx].free = 1; cur_dev->lnode_list[lnode_idx].in_use = 0; } exit_remove_lnode: Loading
drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +27 −0 Original line number Diff line number Diff line Loading @@ -281,6 +281,33 @@ int msm_bus_commit_data(int *dirty_nodes, int ctx, int num_dirty) return ret; } void *msm_bus_realloc_devmem(struct device *dev, void *p, size_t old_size, size_t new_size, gfp_t flags) { void *ret; size_t copy_size = old_size; if (!new_size) { devm_kfree(dev, p); return ZERO_SIZE_PTR; } if (new_size < old_size) copy_size = new_size; ret = devm_kzalloc(dev, new_size, flags); if (!ret) { MSM_BUS_ERR("%s: Error Reallocating memory", __func__); goto exit_realloc_devmem; } memcpy(ret, p, copy_size); devm_kfree(dev, p); exit_realloc_devmem: return ret; } static int add_dirty_node(int **dirty_nodes, int id, int *num_dirty) { int i; Loading