Commit a0aeccdc authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
  sparc64: Fix NMI startup bug which also breaks perf.
  sparc: fix size argument to find_next_zero_bit()
  sparc: use bitmap_set()
  sparc32: unaligned memory access (MNA) trap handler bug
parents fa7ea87a b62818e5
...@@ -43,4 +43,6 @@ static inline u64 picl_value(unsigned int nmi_hz) ...@@ -43,4 +43,6 @@ static inline u64 picl_value(unsigned int nmi_hz)
extern u64 pcr_enable; extern u64 pcr_enable;
extern int pcr_arch_init(void);
#endif /* __PCR_H */ #endif /* __PCR_H */
...@@ -255,10 +255,9 @@ static inline iopte_t *alloc_npages(struct device *dev, struct iommu *iommu, ...@@ -255,10 +255,9 @@ static inline iopte_t *alloc_npages(struct device *dev, struct iommu *iommu,
static int iommu_alloc_ctx(struct iommu *iommu) static int iommu_alloc_ctx(struct iommu *iommu)
{ {
int lowest = iommu->ctx_lowest_free; int lowest = iommu->ctx_lowest_free;
int sz = IOMMU_NUM_CTXS - lowest; int n = find_next_zero_bit(iommu->ctx_bitmap, IOMMU_NUM_CTXS, lowest);
int n = find_next_zero_bit(iommu->ctx_bitmap, sz, lowest);
if (unlikely(n == sz)) { if (unlikely(n == IOMMU_NUM_CTXS)) {
n = find_next_zero_bit(iommu->ctx_bitmap, lowest, 1); n = find_next_zero_bit(iommu->ctx_bitmap, lowest, 1);
if (unlikely(n == lowest)) { if (unlikely(n == lowest)) {
printk(KERN_WARNING "IOMMU: Ran out of contexts.\n"); printk(KERN_WARNING "IOMMU: Ran out of contexts.\n");
......
...@@ -167,5 +167,3 @@ int __init pcr_arch_init(void) ...@@ -167,5 +167,3 @@ int __init pcr_arch_init(void)
unregister_perf_hsvc(); unregister_perf_hsvc();
return err; return err;
} }
early_initcall(pcr_arch_init);
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include <asm/mdesc.h> #include <asm/mdesc.h>
#include <asm/ldc.h> #include <asm/ldc.h>
#include <asm/hypervisor.h> #include <asm/hypervisor.h>
#include <asm/pcr.h>
#include "cpumap.h" #include "cpumap.h"
...@@ -1358,6 +1359,7 @@ void __cpu_die(unsigned int cpu) ...@@ -1358,6 +1359,7 @@ void __cpu_die(unsigned int cpu)
void __init smp_cpus_done(unsigned int max_cpus) void __init smp_cpus_done(unsigned int max_cpus)
{ {
pcr_arch_init();
} }
void smp_send_reschedule(int cpu) void smp_send_reschedule(int cpu)
......
...@@ -24,9 +24,9 @@ retl_efault: ...@@ -24,9 +24,9 @@ retl_efault:
.globl __do_int_store .globl __do_int_store
__do_int_store: __do_int_store:
ld [%o2], %g1 ld [%o2], %g1
cmp %1, 2 cmp %o1, 2
be 2f be 2f
cmp %1, 4 cmp %o1, 4
be 1f be 1f
srl %g1, 24, %g2 srl %g1, 24, %g2
srl %g1, 16, %g7 srl %g1, 16, %g7
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
*/ */
#include <linux/string.h> #include <linux/string.h>
#include <linux/bitops.h> #include <linux/bitmap.h>
#include <asm/bitext.h> #include <asm/bitext.h>
...@@ -80,8 +80,7 @@ int bit_map_string_get(struct bit_map *t, int len, int align) ...@@ -80,8 +80,7 @@ int bit_map_string_get(struct bit_map *t, int len, int align)
while (test_bit(offset + i, t->map) == 0) { while (test_bit(offset + i, t->map) == 0) {
i++; i++;
if (i == len) { if (i == len) {
for (i = 0; i < len; i++) bitmap_set(t->map, offset, len);
__set_bit(offset + i, t->map);
if (offset == t->first_free) if (offset == t->first_free)
t->first_free = find_next_zero_bit t->first_free = find_next_zero_bit
(t->map, t->size, (t->map, t->size,
......
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