diff options
| -rw-r--r-- | arch/x86/include/asm/msr.h | 4 | ||||
| -rw-r--r-- | arch/x86/include/asm/rwsem.h | 21 | ||||
| -rw-r--r-- | arch/x86/kernel/aperture_64.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/mtrr/generic.c | 3 |
4 files changed, 14 insertions, 18 deletions
diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h index c5bc4c2d33f5..084ef95274cd 100644 --- a/arch/x86/include/asm/msr.h +++ b/arch/x86/include/asm/msr.h | |||
| @@ -148,8 +148,8 @@ static inline unsigned long long native_read_pmc(int counter) | |||
| 148 | #define rdmsr(msr, val1, val2) \ | 148 | #define rdmsr(msr, val1, val2) \ |
| 149 | do { \ | 149 | do { \ |
| 150 | u64 __val = native_read_msr((msr)); \ | 150 | u64 __val = native_read_msr((msr)); \ |
| 151 | (val1) = (u32)__val; \ | 151 | (void)((val1) = (u32)__val); \ |
| 152 | (val2) = (u32)(__val >> 32); \ | 152 | (void)((val2) = (u32)(__val >> 32)); \ |
| 153 | } while (0) | 153 | } while (0) |
| 154 | 154 | ||
| 155 | static inline void wrmsr(unsigned msr, unsigned low, unsigned high) | 155 | static inline void wrmsr(unsigned msr, unsigned low, unsigned high) |
diff --git a/arch/x86/include/asm/rwsem.h b/arch/x86/include/asm/rwsem.h index 606ede126972..d1e41b0f9b60 100644 --- a/arch/x86/include/asm/rwsem.h +++ b/arch/x86/include/asm/rwsem.h | |||
| @@ -118,7 +118,7 @@ static inline void __down_read(struct rw_semaphore *sem) | |||
| 118 | { | 118 | { |
| 119 | asm volatile("# beginning down_read\n\t" | 119 | asm volatile("# beginning down_read\n\t" |
| 120 | LOCK_PREFIX _ASM_INC "(%1)\n\t" | 120 | LOCK_PREFIX _ASM_INC "(%1)\n\t" |
| 121 | /* adds 0x00000001, returns the old value */ | 121 | /* adds 0x00000001 */ |
| 122 | " jns 1f\n" | 122 | " jns 1f\n" |
| 123 | " call call_rwsem_down_read_failed\n" | 123 | " call call_rwsem_down_read_failed\n" |
| 124 | "1:\n\t" | 124 | "1:\n\t" |
| @@ -156,11 +156,9 @@ static inline int __down_read_trylock(struct rw_semaphore *sem) | |||
| 156 | static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) | 156 | static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) |
| 157 | { | 157 | { |
| 158 | rwsem_count_t tmp; | 158 | rwsem_count_t tmp; |
| 159 | |||
| 160 | tmp = RWSEM_ACTIVE_WRITE_BIAS; | ||
| 161 | asm volatile("# beginning down_write\n\t" | 159 | asm volatile("# beginning down_write\n\t" |
| 162 | LOCK_PREFIX " xadd %1,(%2)\n\t" | 160 | LOCK_PREFIX " xadd %1,(%2)\n\t" |
| 163 | /* subtract 0x0000ffff, returns the old value */ | 161 | /* adds 0xffff0001, returns the old value */ |
| 164 | " test %1,%1\n\t" | 162 | " test %1,%1\n\t" |
| 165 | /* was the count 0 before? */ | 163 | /* was the count 0 before? */ |
| 166 | " jz 1f\n" | 164 | " jz 1f\n" |
| @@ -168,7 +166,7 @@ static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) | |||
| 168 | "1:\n" | 166 | "1:\n" |
| 169 | "# ending down_write" | 167 | "# ending down_write" |
| 170 | : "+m" (sem->count), "=d" (tmp) | 168 | : "+m" (sem->count), "=d" (tmp) |
| 171 | : "a" (sem), "1" (tmp) | 169 | : "a" (sem), "1" (RWSEM_ACTIVE_WRITE_BIAS) |
| 172 | : "memory", "cc"); | 170 | : "memory", "cc"); |
| 173 | } | 171 | } |
| 174 | 172 | ||
| @@ -195,16 +193,16 @@ static inline int __down_write_trylock(struct rw_semaphore *sem) | |||
| 195 | */ | 193 | */ |
| 196 | static inline void __up_read(struct rw_semaphore *sem) | 194 | static inline void __up_read(struct rw_semaphore *sem) |
| 197 | { | 195 | { |
| 198 | rwsem_count_t tmp = -RWSEM_ACTIVE_READ_BIAS; | 196 | rwsem_count_t tmp; |
| 199 | asm volatile("# beginning __up_read\n\t" | 197 | asm volatile("# beginning __up_read\n\t" |
| 200 | LOCK_PREFIX " xadd %1,(%2)\n\t" | 198 | LOCK_PREFIX " xadd %1,(%2)\n\t" |
| 201 | /* subtracts 1, returns the old value */ | 199 | /* subtracts 1, returns the old value */ |
| 202 | " jns 1f\n\t" | 200 | " jns 1f\n\t" |
| 203 | " call call_rwsem_wake\n" | 201 | " call call_rwsem_wake\n" /* expects old value in %edx */ |
| 204 | "1:\n" | 202 | "1:\n" |
| 205 | "# ending __up_read\n" | 203 | "# ending __up_read\n" |
| 206 | : "+m" (sem->count), "=d" (tmp) | 204 | : "+m" (sem->count), "=d" (tmp) |
| 207 | : "a" (sem), "1" (tmp) | 205 | : "a" (sem), "1" (-RWSEM_ACTIVE_READ_BIAS) |
| 208 | : "memory", "cc"); | 206 | : "memory", "cc"); |
| 209 | } | 207 | } |
| 210 | 208 | ||
| @@ -216,10 +214,9 @@ static inline void __up_write(struct rw_semaphore *sem) | |||
| 216 | rwsem_count_t tmp; | 214 | rwsem_count_t tmp; |
| 217 | asm volatile("# beginning __up_write\n\t" | 215 | asm volatile("# beginning __up_write\n\t" |
| 218 | LOCK_PREFIX " xadd %1,(%2)\n\t" | 216 | LOCK_PREFIX " xadd %1,(%2)\n\t" |
| 219 | /* tries to transition | 217 | /* subtracts 0xffff0001, returns the old value */ |
| 220 | 0xffff0001 -> 0x00000000 */ | 218 | " jns 1f\n\t" |
| 221 | " jz 1f\n" | 219 | " call call_rwsem_wake\n" /* expects old value in %edx */ |
| 222 | " call call_rwsem_wake\n" | ||
| 223 | "1:\n\t" | 220 | "1:\n\t" |
| 224 | "# ending __up_write\n" | 221 | "# ending __up_write\n" |
| 225 | : "+m" (sem->count), "=d" (tmp) | 222 | : "+m" (sem->count), "=d" (tmp) |
diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c index b5d8b0bcf235..a2e0caf26e17 100644 --- a/arch/x86/kernel/aperture_64.c +++ b/arch/x86/kernel/aperture_64.c | |||
| @@ -280,7 +280,7 @@ void __init early_gart_iommu_check(void) | |||
| 280 | * or BIOS forget to put that in reserved. | 280 | * or BIOS forget to put that in reserved. |
| 281 | * try to update e820 to make that region as reserved. | 281 | * try to update e820 to make that region as reserved. |
| 282 | */ | 282 | */ |
| 283 | u32 agp_aper_base = 0, agp_aper_order = 0; | 283 | u32 agp_aper_order = 0; |
| 284 | int i, fix, slot, valid_agp = 0; | 284 | int i, fix, slot, valid_agp = 0; |
| 285 | u32 ctl; | 285 | u32 ctl; |
| 286 | u32 aper_size = 0, aper_order = 0, last_aper_order = 0; | 286 | u32 aper_size = 0, aper_order = 0, last_aper_order = 0; |
| @@ -291,7 +291,7 @@ void __init early_gart_iommu_check(void) | |||
| 291 | return; | 291 | return; |
| 292 | 292 | ||
| 293 | /* This is mostly duplicate of iommu_hole_init */ | 293 | /* This is mostly duplicate of iommu_hole_init */ |
| 294 | agp_aper_base = search_agp_bridge(&agp_aper_order, &valid_agp); | 294 | search_agp_bridge(&agp_aper_order, &valid_agp); |
| 295 | 295 | ||
| 296 | fix = 0; | 296 | fix = 0; |
| 297 | for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { | 297 | for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { |
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c index fd31a441c61c..7d28d7d03885 100644 --- a/arch/x86/kernel/cpu/mtrr/generic.c +++ b/arch/x86/kernel/cpu/mtrr/generic.c | |||
| @@ -433,13 +433,12 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, | |||
| 433 | { | 433 | { |
| 434 | unsigned int mask_lo, mask_hi, base_lo, base_hi; | 434 | unsigned int mask_lo, mask_hi, base_lo, base_hi; |
| 435 | unsigned int tmp, hi; | 435 | unsigned int tmp, hi; |
| 436 | int cpu; | ||
| 437 | 436 | ||
| 438 | /* | 437 | /* |
| 439 | * get_mtrr doesn't need to update mtrr_state, also it could be called | 438 | * get_mtrr doesn't need to update mtrr_state, also it could be called |
| 440 | * from any cpu, so try to print it out directly. | 439 | * from any cpu, so try to print it out directly. |
| 441 | */ | 440 | */ |
| 442 | cpu = get_cpu(); | 441 | get_cpu(); |
| 443 | 442 | ||
| 444 | rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); | 443 | rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); |
| 445 | 444 | ||
