diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-01 14:26:26 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-01 14:26:26 -0400 |
commit | d5f1a21ca05cad212829460ee7900915128e3401 (patch) | |
tree | cc9a7f00436677f5ac8398a3f7d099bfb2353403 | |
parent | 1f4cfbaa2bede7d371ea2e589e87c6881235a711 (diff) | |
parent | 1035d60d92325bddcc4248df5a27dcd5698f5931 (diff) |
Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm:
[ARM] 4875/1: Add MODULE_ALIAS to ixp4xx-beeper module
[ARM] 4873/1: Fix ITE 8152 interrupt demux
[ARM] 4878/1: Add oabi shim for fstatat64
-rw-r--r-- | arch/arm/common/it8152.c | 5 | ||||
-rw-r--r-- | arch/arm/kernel/calls.S | 2 | ||||
-rw-r--r-- | arch/arm/kernel/sys_oabi-compat.c | 24 |
3 files changed, 28 insertions, 3 deletions
diff --git a/arch/arm/common/it8152.c b/arch/arm/common/it8152.c index 538262241483..5fe9588db077 100644 --- a/arch/arm/common/it8152.c +++ b/arch/arm/common/it8152.c | |||
@@ -120,6 +120,7 @@ void it8152_irq_demux(unsigned int irq, struct irq_desc *desc) | |||
120 | time, when they all three were 0. */ | 120 | time, when they all three were 0. */ |
121 | bits_pd = __raw_readl(IT8152_INTC_PDCNIRR); | 121 | bits_pd = __raw_readl(IT8152_INTC_PDCNIRR); |
122 | bits_lp = __raw_readl(IT8152_INTC_LPCNIRR); | 122 | bits_lp = __raw_readl(IT8152_INTC_LPCNIRR); |
123 | bits_ld = __raw_readl(IT8152_INTC_LDCNIRR); | ||
123 | if (!(bits_ld | bits_lp | bits_pd)) | 124 | if (!(bits_ld | bits_lp | bits_pd)) |
124 | return; | 125 | return; |
125 | } | 126 | } |
@@ -133,14 +134,14 @@ void it8152_irq_demux(unsigned int irq, struct irq_desc *desc) | |||
133 | 134 | ||
134 | bits_lp &= ((1 << IT8152_LP_IRQ_COUNT) - 1); | 135 | bits_lp &= ((1 << IT8152_LP_IRQ_COUNT) - 1); |
135 | while (bits_lp) { | 136 | while (bits_lp) { |
136 | i = __ffs(bits_pd); | 137 | i = __ffs(bits_lp); |
137 | it8152_irq(IT8152_LP_IRQ(i)); | 138 | it8152_irq(IT8152_LP_IRQ(i)); |
138 | bits_lp &= ~(1 << i); | 139 | bits_lp &= ~(1 << i); |
139 | } | 140 | } |
140 | 141 | ||
141 | bits_ld &= ((1 << IT8152_LD_IRQ_COUNT) - 1); | 142 | bits_ld &= ((1 << IT8152_LD_IRQ_COUNT) - 1); |
142 | while (bits_ld) { | 143 | while (bits_ld) { |
143 | i = __ffs(bits_pd); | 144 | i = __ffs(bits_ld); |
144 | it8152_irq(IT8152_LD_IRQ(i)); | 145 | it8152_irq(IT8152_LD_IRQ(i)); |
145 | bits_ld &= ~(1 << i); | 146 | bits_ld &= ~(1 << i); |
146 | } | 147 | } |
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 283e14fff993..7e97b7376563 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
@@ -336,7 +336,7 @@ | |||
336 | CALL(sys_mknodat) | 336 | CALL(sys_mknodat) |
337 | /* 325 */ CALL(sys_fchownat) | 337 | /* 325 */ CALL(sys_fchownat) |
338 | CALL(sys_futimesat) | 338 | CALL(sys_futimesat) |
339 | CALL(sys_fstatat64) | 339 | CALL(ABI(sys_fstatat64, sys_oabi_fstatat64)) |
340 | CALL(sys_unlinkat) | 340 | CALL(sys_unlinkat) |
341 | CALL(sys_renameat) | 341 | CALL(sys_renameat) |
342 | /* 330 */ CALL(sys_linkat) | 342 | /* 330 */ CALL(sys_linkat) |
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index e8b98046895b..96ab5f52949c 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
@@ -25,6 +25,7 @@ | |||
25 | * sys_stat64: | 25 | * sys_stat64: |
26 | * sys_lstat64: | 26 | * sys_lstat64: |
27 | * sys_fstat64: | 27 | * sys_fstat64: |
28 | * sys_fstatat64: | ||
28 | * | 29 | * |
29 | * struct stat64 has different sizes and some members are shifted | 30 | * struct stat64 has different sizes and some members are shifted |
30 | * Compatibility wrappers are needed for them and provided below. | 31 | * Compatibility wrappers are needed for them and provided below. |
@@ -169,6 +170,29 @@ asmlinkage long sys_oabi_fstat64(unsigned long fd, | |||
169 | return error; | 170 | return error; |
170 | } | 171 | } |
171 | 172 | ||
173 | asmlinkage long sys_oabi_fstatat64(int dfd, | ||
174 | char __user *filename, | ||
175 | struct oldabi_stat64 __user *statbuf, | ||
176 | int flag) | ||
177 | { | ||
178 | struct kstat stat; | ||
179 | int error = -EINVAL; | ||
180 | |||
181 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
182 | goto out; | ||
183 | |||
184 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
185 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
186 | else | ||
187 | error = vfs_stat_fd(dfd, filename, &stat); | ||
188 | |||
189 | if (!error) | ||
190 | error = cp_oldabi_stat64(&stat, statbuf); | ||
191 | |||
192 | out: | ||
193 | return error; | ||
194 | } | ||
195 | |||
172 | struct oabi_flock64 { | 196 | struct oabi_flock64 { |
173 | short l_type; | 197 | short l_type; |
174 | short l_whence; | 198 | short l_whence; |