diff options
author | Ingo Molnar <mingo@elte.hu> | 2012-03-05 03:20:08 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2012-03-05 03:20:08 -0500 |
commit | 737f24bda723fdf89ecaacb99fa2bf5683c32799 (patch) | |
tree | 35495fff3e9956679cb5468e74e6814c8e44ee66 /lib | |
parent | 8eedce996556d7d06522cd3a0e6069141c8dffe0 (diff) | |
parent | b7c924274c456499264d1cfa3d44063bb11eb5db (diff) |
Merge branch 'perf/urgent' into perf/core
Conflicts:
tools/perf/builtin-record.c
tools/perf/builtin-top.c
tools/perf/perf.h
tools/perf/util/top.h
Merge reason: resolve these cherry-picking conflicts.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig | 3 | ||||
-rw-r--r-- | lib/kstrtox.c | 18 | ||||
-rw-r--r-- | lib/pci_iomap.c | 2 |
3 files changed, 17 insertions, 6 deletions
diff --git a/lib/Kconfig b/lib/Kconfig index d69d321a0997..028aba9e72af 100644 --- a/lib/Kconfig +++ b/lib/Kconfig | |||
@@ -19,6 +19,9 @@ config RATIONAL | |||
19 | config GENERIC_FIND_FIRST_BIT | 19 | config GENERIC_FIND_FIRST_BIT |
20 | bool | 20 | bool |
21 | 21 | ||
22 | config NO_GENERIC_PCI_IOPORT_MAP | ||
23 | bool | ||
24 | |||
22 | config GENERIC_PCI_IOMAP | 25 | config GENERIC_PCI_IOMAP |
23 | bool | 26 | bool |
24 | 27 | ||
diff --git a/lib/kstrtox.c b/lib/kstrtox.c index 7a94c8f14e29..b1dd3e7d88cb 100644 --- a/lib/kstrtox.c +++ b/lib/kstrtox.c | |||
@@ -44,12 +44,13 @@ const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) | |||
44 | * | 44 | * |
45 | * Don't you dare use this function. | 45 | * Don't you dare use this function. |
46 | */ | 46 | */ |
47 | unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long *res) | 47 | unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long *p) |
48 | { | 48 | { |
49 | unsigned long long res; | ||
49 | unsigned int rv; | 50 | unsigned int rv; |
50 | int overflow; | 51 | int overflow; |
51 | 52 | ||
52 | *res = 0; | 53 | res = 0; |
53 | rv = 0; | 54 | rv = 0; |
54 | overflow = 0; | 55 | overflow = 0; |
55 | while (*s) { | 56 | while (*s) { |
@@ -64,12 +65,19 @@ unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long | |||
64 | 65 | ||
65 | if (val >= base) | 66 | if (val >= base) |
66 | break; | 67 | break; |
67 | if (*res > div_u64(ULLONG_MAX - val, base)) | 68 | /* |
68 | overflow = 1; | 69 | * Check for overflow only if we are within range of |
69 | *res = *res * base + val; | 70 | * it in the max base we support (16) |
71 | */ | ||
72 | if (unlikely(res & (~0ull << 60))) { | ||
73 | if (res > div_u64(ULLONG_MAX - val, base)) | ||
74 | overflow = 1; | ||
75 | } | ||
76 | res = res * base + val; | ||
70 | rv++; | 77 | rv++; |
71 | s++; | 78 | s++; |
72 | } | 79 | } |
80 | *p = res; | ||
73 | if (overflow) | 81 | if (overflow) |
74 | rv |= KSTRTOX_OVERFLOW; | 82 | rv |= KSTRTOX_OVERFLOW; |
75 | return rv; | 83 | return rv; |
diff --git a/lib/pci_iomap.c b/lib/pci_iomap.c index 4b0fdc22e688..0d83ea8a9605 100644 --- a/lib/pci_iomap.c +++ b/lib/pci_iomap.c | |||
@@ -34,7 +34,7 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) | |||
34 | if (maxlen && len > maxlen) | 34 | if (maxlen && len > maxlen) |
35 | len = maxlen; | 35 | len = maxlen; |
36 | if (flags & IORESOURCE_IO) | 36 | if (flags & IORESOURCE_IO) |
37 | return ioport_map(start, len); | 37 | return __pci_ioport_map(dev, start, len); |
38 | if (flags & IORESOURCE_MEM) { | 38 | if (flags & IORESOURCE_MEM) { |
39 | if (flags & IORESOURCE_CACHEABLE) | 39 | if (flags & IORESOURCE_CACHEABLE) |
40 | return ioremap(start, len); | 40 | return ioremap(start, len); |