Commit 73f1f5dd authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'akpm' (Andrew's patch-bomb)

Merge misc fixes from Andrew Morton.

* emailed from Andrew Morton <akpm@linux-foundation.org>: (4 patches)
  frv: delete incorrect task prototypes causing compile fail
  slub: missing test for partial pages flush work in flush_all()
  fs, proc: fix ABBA deadlock in case of execution attempt of map_files/ entries
  drivers/rtc/rtc-pl031.c: configure correct wday for 2000-01-01
parents 30a08bf2 93c2d656
...@@ -135,10 +135,6 @@ unsigned long get_wchan(struct task_struct *p); ...@@ -135,10 +135,6 @@ unsigned long get_wchan(struct task_struct *p);
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc) #define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
#define KSTK_ESP(tsk) ((tsk)->thread.frame0->sp) #define KSTK_ESP(tsk) ((tsk)->thread.frame0->sp)
/* Allocation and freeing of basic task resources. */
extern struct task_struct *alloc_task_struct_node(int node);
extern void free_task_struct(struct task_struct *p);
#define cpu_relax() barrier() #define cpu_relax() barrier()
/* data cache prefetch */ /* data cache prefetch */
......
...@@ -312,6 +312,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -312,6 +312,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
int ret; int ret;
struct pl031_local *ldata; struct pl031_local *ldata;
struct rtc_class_ops *ops = id->data; struct rtc_class_ops *ops = id->data;
unsigned long time;
ret = amba_request_regions(adev, NULL); ret = amba_request_regions(adev, NULL);
if (ret) if (ret)
...@@ -343,6 +344,23 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -343,6 +344,23 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN, writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN,
ldata->base + RTC_CR); ldata->base + RTC_CR);
/*
* On ST PL031 variants, the RTC reset value does not provide correct
* weekday for 2000-01-01. Correct the erroneous sunday to saturday.
*/
if (ldata->hw_designer == AMBA_VENDOR_ST) {
if (readl(ldata->base + RTC_YDR) == 0x2000) {
time = readl(ldata->base + RTC_DR);
if ((time &
(RTC_MON_MASK | RTC_MDAY_MASK | RTC_WDAY_MASK))
== 0x02120000) {
time = time | (0x7 << RTC_WDAY_SHIFT);
writel(0x2000, ldata->base + RTC_YLR);
writel(time, ldata->base + RTC_LR);
}
}
}
ldata->rtc = rtc_device_register("pl031", &adev->dev, ops, ldata->rtc = rtc_device_register("pl031", &adev->dev, ops,
THIS_MODULE); THIS_MODULE);
if (IS_ERR(ldata->rtc)) { if (IS_ERR(ldata->rtc)) {
......
...@@ -2162,16 +2162,16 @@ static struct dentry *proc_map_files_lookup(struct inode *dir, ...@@ -2162,16 +2162,16 @@ static struct dentry *proc_map_files_lookup(struct inode *dir,
goto out; goto out;
result = ERR_PTR(-EACCES); result = ERR_PTR(-EACCES);
if (lock_trace(task)) if (!ptrace_may_access(task, PTRACE_MODE_READ))
goto out_put_task; goto out_put_task;
result = ERR_PTR(-ENOENT); result = ERR_PTR(-ENOENT);
if (dname_to_vma_addr(dentry, &vm_start, &vm_end)) if (dname_to_vma_addr(dentry, &vm_start, &vm_end))
goto out_unlock; goto out_put_task;
mm = get_task_mm(task); mm = get_task_mm(task);
if (!mm) if (!mm)
goto out_unlock; goto out_put_task;
down_read(&mm->mmap_sem); down_read(&mm->mmap_sem);
vma = find_exact_vma(mm, vm_start, vm_end); vma = find_exact_vma(mm, vm_start, vm_end);
...@@ -2183,8 +2183,6 @@ static struct dentry *proc_map_files_lookup(struct inode *dir, ...@@ -2183,8 +2183,6 @@ static struct dentry *proc_map_files_lookup(struct inode *dir,
out_no_vma: out_no_vma:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
mmput(mm); mmput(mm);
out_unlock:
unlock_trace(task);
out_put_task: out_put_task:
put_task_struct(task); put_task_struct(task);
out: out:
...@@ -2218,7 +2216,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -2218,7 +2216,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir)
goto out; goto out;
ret = -EACCES; ret = -EACCES;
if (lock_trace(task)) if (!ptrace_may_access(task, PTRACE_MODE_READ))
goto out_put_task; goto out_put_task;
ret = 0; ret = 0;
...@@ -2226,12 +2224,12 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -2226,12 +2224,12 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir)
case 0: case 0:
ino = inode->i_ino; ino = inode->i_ino;
if (filldir(dirent, ".", 1, 0, ino, DT_DIR) < 0) if (filldir(dirent, ".", 1, 0, ino, DT_DIR) < 0)
goto out_unlock; goto out_put_task;
filp->f_pos++; filp->f_pos++;
case 1: case 1:
ino = parent_ino(dentry); ino = parent_ino(dentry);
if (filldir(dirent, "..", 2, 1, ino, DT_DIR) < 0) if (filldir(dirent, "..", 2, 1, ino, DT_DIR) < 0)
goto out_unlock; goto out_put_task;
filp->f_pos++; filp->f_pos++;
default: default:
{ {
...@@ -2242,7 +2240,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -2242,7 +2240,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir)
mm = get_task_mm(task); mm = get_task_mm(task);
if (!mm) if (!mm)
goto out_unlock; goto out_put_task;
down_read(&mm->mmap_sem); down_read(&mm->mmap_sem);
nr_files = 0; nr_files = 0;
...@@ -2272,7 +2270,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -2272,7 +2270,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir)
flex_array_free(fa); flex_array_free(fa);
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
mmput(mm); mmput(mm);
goto out_unlock; goto out_put_task;
} }
for (i = 0, vma = mm->mmap, pos = 2; vma; for (i = 0, vma = mm->mmap, pos = 2; vma;
vma = vma->vm_next) { vma = vma->vm_next) {
...@@ -2317,8 +2315,6 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -2317,8 +2315,6 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir)
} }
} }
out_unlock:
unlock_trace(task);
out_put_task: out_put_task:
put_task_struct(task); put_task_struct(task);
out: out:
......
...@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info) ...@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
struct kmem_cache *s = info; struct kmem_cache *s = info;
struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu); struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
return !!(c->page); return c->page || c->partial;
} }
static void flush_all(struct kmem_cache *s) static void flush_all(struct kmem_cache *s)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment