diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig | 3 | ||||
-rw-r--r-- | lib/debugobjects.c | 14 | ||||
-rw-r--r-- | lib/kstrtox.c | 18 | ||||
-rw-r--r-- | lib/pci_iomap.c | 2 | ||||
-rw-r--r-- | lib/vsprintf.c | 12 |
5 files changed, 29 insertions, 20 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/debugobjects.c b/lib/debugobjects.c index 77cb245f8e7b..0ab9ae8057f0 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c | |||
@@ -818,17 +818,9 @@ static int __init fixup_activate(void *addr, enum debug_obj_state state) | |||
818 | if (obj->static_init == 1) { | 818 | if (obj->static_init == 1) { |
819 | debug_object_init(obj, &descr_type_test); | 819 | debug_object_init(obj, &descr_type_test); |
820 | debug_object_activate(obj, &descr_type_test); | 820 | debug_object_activate(obj, &descr_type_test); |
821 | /* | 821 | return 0; |
822 | * Real code should return 0 here ! This is | ||
823 | * not a fixup of some bad behaviour. We | ||
824 | * merily call the debug_init function to keep | ||
825 | * track of the object. | ||
826 | */ | ||
827 | return 1; | ||
828 | } else { | ||
829 | /* Real code needs to emit a warning here */ | ||
830 | } | 822 | } |
831 | return 0; | 823 | return 1; |
832 | 824 | ||
833 | case ODEBUG_STATE_ACTIVE: | 825 | case ODEBUG_STATE_ACTIVE: |
834 | debug_object_deactivate(obj, &descr_type_test); | 826 | debug_object_deactivate(obj, &descr_type_test); |
@@ -967,7 +959,7 @@ static void __init debug_objects_selftest(void) | |||
967 | 959 | ||
968 | obj.static_init = 1; | 960 | obj.static_init = 1; |
969 | debug_object_activate(&obj, &descr_type_test); | 961 | debug_object_activate(&obj, &descr_type_test); |
970 | if (check_results(&obj, ODEBUG_STATE_ACTIVE, ++fixups, warnings)) | 962 | if (check_results(&obj, ODEBUG_STATE_ACTIVE, fixups, warnings)) |
971 | goto out; | 963 | goto out; |
972 | debug_object_init(&obj, &descr_type_test); | 964 | debug_object_init(&obj, &descr_type_test); |
973 | if (check_results(&obj, ODEBUG_STATE_INIT, ++fixups, ++warnings)) | 965 | if (check_results(&obj, ODEBUG_STATE_INIT, ++fixups, ++warnings)) |
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); |
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 8e75003d62f6..38e612e66da5 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c | |||
@@ -891,9 +891,15 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, | |||
891 | case 'U': | 891 | case 'U': |
892 | return uuid_string(buf, end, ptr, spec, fmt); | 892 | return uuid_string(buf, end, ptr, spec, fmt); |
893 | case 'V': | 893 | case 'V': |
894 | return buf + vsnprintf(buf, end > buf ? end - buf : 0, | 894 | { |
895 | ((struct va_format *)ptr)->fmt, | 895 | va_list va; |
896 | *(((struct va_format *)ptr)->va)); | 896 | |
897 | va_copy(va, *((struct va_format *)ptr)->va); | ||
898 | buf += vsnprintf(buf, end > buf ? end - buf : 0, | ||
899 | ((struct va_format *)ptr)->fmt, va); | ||
900 | va_end(va); | ||
901 | return buf; | ||
902 | } | ||
897 | case 'K': | 903 | case 'K': |
898 | /* | 904 | /* |
899 | * %pK cannot be used in IRQ context because its test | 905 | * %pK cannot be used in IRQ context because its test |