Commit 51ee87f27a1d2c0e08492924f2fb0223c4c704d9
Committed by
Dan Williams
1 parent
0a2ce2ffc3
fsldma: fix incorrect exit path for initialization
Signed-off-by: Li Yang <leoli@freescale.com> Acked-by: Zhang Wei <zw@zh-kernel.org> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Showing 1 changed file with 16 additions and 15 deletions Side-by-side Diff
drivers/dma/fsldma.c
... | ... | @@ -809,8 +809,7 @@ |
809 | 809 | if (!src) { |
810 | 810 | dev_err(fsl_chan->dev, |
811 | 811 | "selftest: Cannot alloc memory for test!\n"); |
812 | - err = -ENOMEM; | |
813 | - goto out; | |
812 | + return -ENOMEM; | |
814 | 813 | } |
815 | 814 | |
816 | 815 | dest = src + test_size; |
... | ... | @@ -842,7 +841,7 @@ |
842 | 841 | if (fsl_dma_is_complete(chan, cookie, NULL, NULL) != DMA_SUCCESS) { |
843 | 842 | dev_err(fsl_chan->dev, "selftest: Time out!\n"); |
844 | 843 | err = -ENODEV; |
845 | - goto out; | |
844 | + goto free_resources; | |
846 | 845 | } |
847 | 846 | |
848 | 847 | /* Test free and re-alloc channel resources */ |
... | ... | @@ -927,8 +926,7 @@ |
927 | 926 | if (!new_fsl_chan) { |
928 | 927 | dev_err(&dev->dev, "No free memory for allocating " |
929 | 928 | "dma channels!\n"); |
930 | - err = -ENOMEM; | |
931 | - goto err; | |
929 | + return -ENOMEM; | |
932 | 930 | } |
933 | 931 | |
934 | 932 | /* get dma channel register base */ |
... | ... | @@ -936,7 +934,7 @@ |
936 | 934 | if (err) { |
937 | 935 | dev_err(&dev->dev, "Can't get %s property 'reg'\n", |
938 | 936 | dev->node->full_name); |
939 | - goto err; | |
937 | + goto err_no_reg; | |
940 | 938 | } |
941 | 939 | |
942 | 940 | new_fsl_chan->feature = *(u32 *)match->data; |
... | ... | @@ -958,7 +956,7 @@ |
958 | 956 | dev_err(&dev->dev, "There is no %d channel!\n", |
959 | 957 | new_fsl_chan->id); |
960 | 958 | err = -EINVAL; |
961 | - goto err; | |
959 | + goto err_no_chan; | |
962 | 960 | } |
963 | 961 | fdev->chan[new_fsl_chan->id] = new_fsl_chan; |
964 | 962 | tasklet_init(&new_fsl_chan->tasklet, dma_do_tasklet, |
965 | 963 | |
966 | 964 | |
967 | 965 | |
968 | 966 | |
... | ... | @@ -997,23 +995,26 @@ |
997 | 995 | if (err) { |
998 | 996 | dev_err(&dev->dev, "DMA channel %s request_irq error " |
999 | 997 | "with return %d\n", dev->node->full_name, err); |
1000 | - goto err; | |
998 | + goto err_no_irq; | |
1001 | 999 | } |
1002 | 1000 | } |
1003 | 1001 | |
1004 | 1002 | err = fsl_dma_self_test(new_fsl_chan); |
1005 | 1003 | if (err) |
1006 | - goto err; | |
1004 | + goto err_self_test; | |
1007 | 1005 | |
1008 | 1006 | dev_info(&dev->dev, "#%d (%s), irq %d\n", new_fsl_chan->id, |
1009 | 1007 | match->compatible, new_fsl_chan->irq); |
1010 | 1008 | |
1011 | 1009 | return 0; |
1012 | -err: | |
1013 | - dma_halt(new_fsl_chan); | |
1014 | - iounmap(new_fsl_chan->reg_base); | |
1010 | + | |
1011 | +err_self_test: | |
1015 | 1012 | free_irq(new_fsl_chan->irq, new_fsl_chan); |
1013 | +err_no_irq: | |
1016 | 1014 | list_del(&new_fsl_chan->common.device_node); |
1015 | +err_no_chan: | |
1016 | + iounmap(new_fsl_chan->reg_base); | |
1017 | +err_no_reg: | |
1017 | 1018 | kfree(new_fsl_chan); |
1018 | 1019 | return err; |
1019 | 1020 | } |
... | ... | @@ -1054,8 +1055,7 @@ |
1054 | 1055 | fdev = kzalloc(sizeof(struct fsl_dma_device), GFP_KERNEL); |
1055 | 1056 | if (!fdev) { |
1056 | 1057 | dev_err(&dev->dev, "No enough memory for 'priv'\n"); |
1057 | - err = -ENOMEM; | |
1058 | - goto err; | |
1058 | + return -ENOMEM; | |
1059 | 1059 | } |
1060 | 1060 | fdev->dev = &dev->dev; |
1061 | 1061 | INIT_LIST_HEAD(&fdev->common.channels); |
... | ... | @@ -1065,7 +1065,7 @@ |
1065 | 1065 | if (err) { |
1066 | 1066 | dev_err(&dev->dev, "Can't get %s property 'reg'\n", |
1067 | 1067 | dev->node->full_name); |
1068 | - goto err; | |
1068 | + goto err_no_reg; | |
1069 | 1069 | } |
1070 | 1070 | |
1071 | 1071 | dev_info(&dev->dev, "Probe the Freescale DMA driver for %s " |
... | ... | @@ -1103,6 +1103,7 @@ |
1103 | 1103 | |
1104 | 1104 | err: |
1105 | 1105 | iounmap(fdev->reg_base); |
1106 | +err_no_reg: | |
1106 | 1107 | kfree(fdev); |
1107 | 1108 | return err; |
1108 | 1109 | } |