diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-07 16:15:02 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-07 16:15:02 -0500 |
| commit | 214d93b02c4fe93638ad268613c9702a81ed9192 (patch) | |
| tree | a86cbf70b48112bf00933fddc123d147a2de4275 | |
| parent | ad4a4a82d176962ea706db555b29821af0b4dd45 (diff) | |
| parent | 077f8ec889bb1eb26a7128fdbc75922755ed2320 (diff) | |
Merge branch 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
* 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6:
omap: mailbox: resolve hang issue
OMAP2+: PM: SmartReflex: fix memory leaks in Smartreflex driver
arm: mach-omap2: smartreflex: fix another memory leak
| -rw-r--r-- | arch/arm/mach-omap2/mailbox.c | 10 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/smartreflex.c | 33 |
2 files changed, 21 insertions, 22 deletions
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index 0a585dfa9874..24b88504df0f 100644 --- a/arch/arm/mach-omap2/mailbox.c +++ b/arch/arm/mach-omap2/mailbox.c | |||
| @@ -193,10 +193,12 @@ static void omap2_mbox_disable_irq(struct omap_mbox *mbox, | |||
| 193 | omap_mbox_type_t irq) | 193 | omap_mbox_type_t irq) |
| 194 | { | 194 | { |
| 195 | struct omap_mbox2_priv *p = mbox->priv; | 195 | struct omap_mbox2_priv *p = mbox->priv; |
| 196 | u32 l, bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; | 196 | u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; |
| 197 | l = mbox_read_reg(p->irqdisable); | 197 | |
| 198 | l &= ~bit; | 198 | if (!cpu_is_omap44xx()) |
| 199 | mbox_write_reg(l, p->irqdisable); | 199 | bit = mbox_read_reg(p->irqdisable) & ~bit; |
| 200 | |||
| 201 | mbox_write_reg(bit, p->irqdisable); | ||
| 200 | } | 202 | } |
| 201 | 203 | ||
| 202 | static void omap2_mbox_ack_irq(struct omap_mbox *mbox, | 204 | static void omap2_mbox_ack_irq(struct omap_mbox *mbox, |
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 95ac336fe3f7..1a777e34d0c2 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c | |||
| @@ -282,6 +282,7 @@ error: | |||
| 282 | dev_err(&sr_info->pdev->dev, "%s: ERROR in registering" | 282 | dev_err(&sr_info->pdev->dev, "%s: ERROR in registering" |
| 283 | "interrupt handler. Smartreflex will" | 283 | "interrupt handler. Smartreflex will" |
| 284 | "not function as desired\n", __func__); | 284 | "not function as desired\n", __func__); |
| 285 | kfree(name); | ||
| 285 | kfree(sr_info); | 286 | kfree(sr_info); |
| 286 | return ret; | 287 | return ret; |
| 287 | } | 288 | } |
| @@ -879,7 +880,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | |||
| 879 | ret = sr_late_init(sr_info); | 880 | ret = sr_late_init(sr_info); |
| 880 | if (ret) { | 881 | if (ret) { |
| 881 | pr_warning("%s: Error in SR late init\n", __func__); | 882 | pr_warning("%s: Error in SR late init\n", __func__); |
| 882 | return ret; | 883 | goto err_release_region; |
| 883 | } | 884 | } |
| 884 | } | 885 | } |
| 885 | 886 | ||
| @@ -890,14 +891,17 @@ static int __init omap_sr_probe(struct platform_device *pdev) | |||
| 890 | * not try to create rest of the debugfs entries. | 891 | * not try to create rest of the debugfs entries. |
| 891 | */ | 892 | */ |
| 892 | vdd_dbg_dir = omap_voltage_get_dbgdir(sr_info->voltdm); | 893 | vdd_dbg_dir = omap_voltage_get_dbgdir(sr_info->voltdm); |
| 893 | if (!vdd_dbg_dir) | 894 | if (!vdd_dbg_dir) { |
| 894 | return -EINVAL; | 895 | ret = -EINVAL; |
| 896 | goto err_release_region; | ||
| 897 | } | ||
| 895 | 898 | ||
| 896 | dbg_dir = debugfs_create_dir("smartreflex", vdd_dbg_dir); | 899 | dbg_dir = debugfs_create_dir("smartreflex", vdd_dbg_dir); |
| 897 | if (IS_ERR(dbg_dir)) { | 900 | if (IS_ERR(dbg_dir)) { |
| 898 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory\n", | 901 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory\n", |
| 899 | __func__); | 902 | __func__); |
| 900 | return PTR_ERR(dbg_dir); | 903 | ret = PTR_ERR(dbg_dir); |
| 904 | goto err_release_region; | ||
| 901 | } | 905 | } |
| 902 | 906 | ||
| 903 | (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR, dbg_dir, | 907 | (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR, dbg_dir, |
| @@ -913,7 +917,8 @@ static int __init omap_sr_probe(struct platform_device *pdev) | |||
| 913 | if (IS_ERR(nvalue_dir)) { | 917 | if (IS_ERR(nvalue_dir)) { |
| 914 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory" | 918 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory" |
| 915 | "for n-values\n", __func__); | 919 | "for n-values\n", __func__); |
| 916 | return PTR_ERR(nvalue_dir); | 920 | ret = PTR_ERR(nvalue_dir); |
| 921 | goto err_release_region; | ||
| 917 | } | 922 | } |
| 918 | 923 | ||
| 919 | omap_voltage_get_volttable(sr_info->voltdm, &volt_data); | 924 | omap_voltage_get_volttable(sr_info->voltdm, &volt_data); |
| @@ -922,23 +927,15 @@ static int __init omap_sr_probe(struct platform_device *pdev) | |||
| 922 | " corresponding vdd vdd_%s. Cannot create debugfs" | 927 | " corresponding vdd vdd_%s. Cannot create debugfs" |
| 923 | "entries for n-values\n", | 928 | "entries for n-values\n", |
| 924 | __func__, sr_info->voltdm->name); | 929 | __func__, sr_info->voltdm->name); |
| 925 | return -ENODATA; | 930 | ret = -ENODATA; |
| 931 | goto err_release_region; | ||
| 926 | } | 932 | } |
| 927 | 933 | ||
| 928 | for (i = 0; i < sr_info->nvalue_count; i++) { | 934 | for (i = 0; i < sr_info->nvalue_count; i++) { |
| 929 | char *name; | 935 | char name[NVALUE_NAME_LEN + 1]; |
| 930 | char volt_name[32]; | ||
| 931 | |||
| 932 | name = kzalloc(NVALUE_NAME_LEN + 1, GFP_KERNEL); | ||
| 933 | if (!name) { | ||
| 934 | dev_err(&pdev->dev, "%s: Unable to allocate memory" | ||
| 935 | " for n-value directory name\n", __func__); | ||
| 936 | return -ENOMEM; | ||
| 937 | } | ||
| 938 | 936 | ||
| 939 | strcpy(name, "volt_"); | 937 | snprintf(name, sizeof(name), "volt_%d", |
| 940 | sprintf(volt_name, "%d", volt_data[i].volt_nominal); | 938 | volt_data[i].volt_nominal); |
| 941 | strcat(name, volt_name); | ||
| 942 | (void) debugfs_create_x32(name, S_IRUGO | S_IWUSR, nvalue_dir, | 939 | (void) debugfs_create_x32(name, S_IRUGO | S_IWUSR, nvalue_dir, |
| 943 | &(sr_info->nvalue_table[i].nvalue)); | 940 | &(sr_info->nvalue_table[i].nvalue)); |
| 944 | } | 941 | } |
