diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Kconfig.debug | 28 | ||||
| -rw-r--r-- | lib/debug_locks.c | 1 | ||||
| -rw-r--r-- | lib/hweight.c | 7 | ||||
| -rw-r--r-- | lib/idr.c | 8 | ||||
| -rw-r--r-- | lib/lmb.c | 13 | ||||
| -rw-r--r-- | lib/radix-tree.c | 24 | ||||
| -rw-r--r-- | lib/vsprintf.c | 48 |
7 files changed, 103 insertions, 26 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 25c3ed594c54..5e3407d997b2 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -355,7 +355,7 @@ config SLUB_STATS | |||
| 355 | config DEBUG_KMEMLEAK | 355 | config DEBUG_KMEMLEAK |
| 356 | bool "Kernel memory leak detector" | 356 | bool "Kernel memory leak detector" |
| 357 | depends on DEBUG_KERNEL && EXPERIMENTAL && !MEMORY_HOTPLUG && \ | 357 | depends on DEBUG_KERNEL && EXPERIMENTAL && !MEMORY_HOTPLUG && \ |
| 358 | (X86 || ARM || PPC || S390) | 358 | (X86 || ARM || PPC || S390 || SUPERH) |
| 359 | 359 | ||
| 360 | select DEBUG_FS if SYSFS | 360 | select DEBUG_FS if SYSFS |
| 361 | select STACKTRACE if STACKTRACE_SUPPORT | 361 | select STACKTRACE if STACKTRACE_SUPPORT |
| @@ -499,6 +499,18 @@ config PROVE_LOCKING | |||
| 499 | 499 | ||
| 500 | For more details, see Documentation/lockdep-design.txt. | 500 | For more details, see Documentation/lockdep-design.txt. |
| 501 | 501 | ||
| 502 | config PROVE_RCU | ||
| 503 | bool "RCU debugging: prove RCU correctness" | ||
| 504 | depends on PROVE_LOCKING | ||
| 505 | default n | ||
| 506 | help | ||
| 507 | This feature enables lockdep extensions that check for correct | ||
| 508 | use of RCU APIs. This is currently under development. Say Y | ||
| 509 | if you want to debug RCU usage or help work on the PROVE_RCU | ||
| 510 | feature. | ||
| 511 | |||
| 512 | Say N if you are unsure. | ||
| 513 | |||
| 502 | config LOCKDEP | 514 | config LOCKDEP |
| 503 | bool | 515 | bool |
| 504 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 516 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
| @@ -765,10 +777,22 @@ config RCU_CPU_STALL_DETECTOR | |||
| 765 | CPUs are delaying the current grace period, but only when | 777 | CPUs are delaying the current grace period, but only when |
| 766 | the grace period extends for excessive time periods. | 778 | the grace period extends for excessive time periods. |
| 767 | 779 | ||
| 768 | Say Y if you want RCU to perform such checks. | 780 | Say N if you want to disable such checks. |
| 781 | |||
| 782 | Say Y if you are unsure. | ||
| 783 | |||
| 784 | config RCU_CPU_STALL_VERBOSE | ||
| 785 | bool "Print additional per-task information for RCU_CPU_STALL_DETECTOR" | ||
| 786 | depends on RCU_CPU_STALL_DETECTOR && TREE_PREEMPT_RCU | ||
| 787 | default n | ||
| 788 | help | ||
| 789 | This option causes RCU to printk detailed per-task information | ||
| 790 | for any tasks that are stalling the current RCU grace period. | ||
| 769 | 791 | ||
| 770 | Say N if you are unsure. | 792 | Say N if you are unsure. |
| 771 | 793 | ||
| 794 | Say Y if you want to enable such checks. | ||
| 795 | |||
| 772 | config KPROBES_SANITY_TEST | 796 | config KPROBES_SANITY_TEST |
| 773 | bool "Kprobes sanity tests" | 797 | bool "Kprobes sanity tests" |
| 774 | depends on DEBUG_KERNEL | 798 | depends on DEBUG_KERNEL |
diff --git a/lib/debug_locks.c b/lib/debug_locks.c index bc3b11731b9c..5bf0020b9248 100644 --- a/lib/debug_locks.c +++ b/lib/debug_locks.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | * shut up after that. | 23 | * shut up after that. |
| 24 | */ | 24 | */ |
| 25 | int debug_locks = 1; | 25 | int debug_locks = 1; |
| 26 | EXPORT_SYMBOL_GPL(debug_locks); | ||
| 26 | 27 | ||
| 27 | /* | 28 | /* |
| 28 | * The locking-testsuite uses <debug_locks_silent> to get a | 29 | * The locking-testsuite uses <debug_locks_silent> to get a |
diff --git a/lib/hweight.c b/lib/hweight.c index 389424ecb129..63ee4eb1228d 100644 --- a/lib/hweight.c +++ b/lib/hweight.c | |||
| @@ -11,11 +11,18 @@ | |||
| 11 | 11 | ||
| 12 | unsigned int hweight32(unsigned int w) | 12 | unsigned int hweight32(unsigned int w) |
| 13 | { | 13 | { |
| 14 | #ifdef ARCH_HAS_FAST_MULTIPLIER | ||
| 15 | w -= (w >> 1) & 0x55555555; | ||
| 16 | w = (w & 0x33333333) + ((w >> 2) & 0x33333333); | ||
| 17 | w = (w + (w >> 4)) & 0x0f0f0f0f; | ||
| 18 | return (w * 0x01010101) >> 24; | ||
| 19 | #else | ||
| 14 | unsigned int res = w - ((w >> 1) & 0x55555555); | 20 | unsigned int res = w - ((w >> 1) & 0x55555555); |
| 15 | res = (res & 0x33333333) + ((res >> 2) & 0x33333333); | 21 | res = (res & 0x33333333) + ((res >> 2) & 0x33333333); |
| 16 | res = (res + (res >> 4)) & 0x0F0F0F0F; | 22 | res = (res + (res >> 4)) & 0x0F0F0F0F; |
| 17 | res = res + (res >> 8); | 23 | res = res + (res >> 8); |
| 18 | return (res + (res >> 16)) & 0x000000FF; | 24 | return (res + (res >> 16)) & 0x000000FF; |
| 25 | #endif | ||
| 19 | } | 26 | } |
| 20 | EXPORT_SYMBOL(hweight32); | 27 | EXPORT_SYMBOL(hweight32); |
| 21 | 28 | ||
| @@ -504,7 +504,7 @@ void *idr_find(struct idr *idp, int id) | |||
| 504 | int n; | 504 | int n; |
| 505 | struct idr_layer *p; | 505 | struct idr_layer *p; |
| 506 | 506 | ||
| 507 | p = rcu_dereference(idp->top); | 507 | p = rcu_dereference_raw(idp->top); |
| 508 | if (!p) | 508 | if (!p) |
| 509 | return NULL; | 509 | return NULL; |
| 510 | n = (p->layer+1) * IDR_BITS; | 510 | n = (p->layer+1) * IDR_BITS; |
| @@ -519,7 +519,7 @@ void *idr_find(struct idr *idp, int id) | |||
| 519 | while (n > 0 && p) { | 519 | while (n > 0 && p) { |
| 520 | n -= IDR_BITS; | 520 | n -= IDR_BITS; |
| 521 | BUG_ON(n != p->layer*IDR_BITS); | 521 | BUG_ON(n != p->layer*IDR_BITS); |
| 522 | p = rcu_dereference(p->ary[(id >> n) & IDR_MASK]); | 522 | p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]); |
| 523 | } | 523 | } |
| 524 | return((void *)p); | 524 | return((void *)p); |
| 525 | } | 525 | } |
| @@ -552,7 +552,7 @@ int idr_for_each(struct idr *idp, | |||
| 552 | struct idr_layer **paa = &pa[0]; | 552 | struct idr_layer **paa = &pa[0]; |
| 553 | 553 | ||
| 554 | n = idp->layers * IDR_BITS; | 554 | n = idp->layers * IDR_BITS; |
| 555 | p = rcu_dereference(idp->top); | 555 | p = rcu_dereference_raw(idp->top); |
| 556 | max = 1 << n; | 556 | max = 1 << n; |
| 557 | 557 | ||
| 558 | id = 0; | 558 | id = 0; |
| @@ -560,7 +560,7 @@ int idr_for_each(struct idr *idp, | |||
| 560 | while (n > 0 && p) { | 560 | while (n > 0 && p) { |
| 561 | n -= IDR_BITS; | 561 | n -= IDR_BITS; |
| 562 | *paa++ = p; | 562 | *paa++ = p; |
| 563 | p = rcu_dereference(p->ary[(id >> n) & IDR_MASK]); | 563 | p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]); |
| 564 | } | 564 | } |
| 565 | 565 | ||
| 566 | if (p) { | 566 | if (p) { |
| @@ -205,9 +205,8 @@ long lmb_add(u64 base, u64 size) | |||
| 205 | 205 | ||
| 206 | } | 206 | } |
| 207 | 207 | ||
| 208 | long lmb_remove(u64 base, u64 size) | 208 | static long __lmb_remove(struct lmb_region *rgn, u64 base, u64 size) |
| 209 | { | 209 | { |
| 210 | struct lmb_region *rgn = &(lmb.memory); | ||
| 211 | u64 rgnbegin, rgnend; | 210 | u64 rgnbegin, rgnend; |
| 212 | u64 end = base + size; | 211 | u64 end = base + size; |
| 213 | int i; | 212 | int i; |
| @@ -254,6 +253,16 @@ long lmb_remove(u64 base, u64 size) | |||
| 254 | return lmb_add_region(rgn, end, rgnend - end); | 253 | return lmb_add_region(rgn, end, rgnend - end); |
| 255 | } | 254 | } |
| 256 | 255 | ||
| 256 | long lmb_remove(u64 base, u64 size) | ||
| 257 | { | ||
| 258 | return __lmb_remove(&lmb.memory, base, size); | ||
| 259 | } | ||
| 260 | |||
| 261 | long __init lmb_free(u64 base, u64 size) | ||
| 262 | { | ||
| 263 | return __lmb_remove(&lmb.reserved, base, size); | ||
| 264 | } | ||
| 265 | |||
| 257 | long __init lmb_reserve(u64 base, u64 size) | 266 | long __init lmb_reserve(u64 base, u64 size) |
| 258 | { | 267 | { |
| 259 | struct lmb_region *_rgn = &lmb.reserved; | 268 | struct lmb_region *_rgn = &lmb.reserved; |
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 92cdd9936e3d..6b9670d6bbf9 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c | |||
| @@ -364,7 +364,7 @@ static void *radix_tree_lookup_element(struct radix_tree_root *root, | |||
| 364 | unsigned int height, shift; | 364 | unsigned int height, shift; |
| 365 | struct radix_tree_node *node, **slot; | 365 | struct radix_tree_node *node, **slot; |
| 366 | 366 | ||
| 367 | node = rcu_dereference(root->rnode); | 367 | node = rcu_dereference_raw(root->rnode); |
| 368 | if (node == NULL) | 368 | if (node == NULL) |
| 369 | return NULL; | 369 | return NULL; |
| 370 | 370 | ||
| @@ -384,7 +384,7 @@ static void *radix_tree_lookup_element(struct radix_tree_root *root, | |||
| 384 | do { | 384 | do { |
| 385 | slot = (struct radix_tree_node **) | 385 | slot = (struct radix_tree_node **) |
| 386 | (node->slots + ((index>>shift) & RADIX_TREE_MAP_MASK)); | 386 | (node->slots + ((index>>shift) & RADIX_TREE_MAP_MASK)); |
| 387 | node = rcu_dereference(*slot); | 387 | node = rcu_dereference_raw(*slot); |
| 388 | if (node == NULL) | 388 | if (node == NULL) |
| 389 | return NULL; | 389 | return NULL; |
| 390 | 390 | ||
| @@ -568,7 +568,7 @@ int radix_tree_tag_get(struct radix_tree_root *root, | |||
| 568 | if (!root_tag_get(root, tag)) | 568 | if (!root_tag_get(root, tag)) |
| 569 | return 0; | 569 | return 0; |
| 570 | 570 | ||
| 571 | node = rcu_dereference(root->rnode); | 571 | node = rcu_dereference_raw(root->rnode); |
| 572 | if (node == NULL) | 572 | if (node == NULL) |
| 573 | return 0; | 573 | return 0; |
| 574 | 574 | ||
| @@ -602,7 +602,7 @@ int radix_tree_tag_get(struct radix_tree_root *root, | |||
| 602 | BUG_ON(ret && saw_unset_tag); | 602 | BUG_ON(ret && saw_unset_tag); |
| 603 | return !!ret; | 603 | return !!ret; |
| 604 | } | 604 | } |
| 605 | node = rcu_dereference(node->slots[offset]); | 605 | node = rcu_dereference_raw(node->slots[offset]); |
| 606 | shift -= RADIX_TREE_MAP_SHIFT; | 606 | shift -= RADIX_TREE_MAP_SHIFT; |
| 607 | height--; | 607 | height--; |
| 608 | } | 608 | } |
| @@ -711,7 +711,7 @@ __lookup(struct radix_tree_node *slot, void ***results, unsigned long index, | |||
| 711 | } | 711 | } |
| 712 | 712 | ||
| 713 | shift -= RADIX_TREE_MAP_SHIFT; | 713 | shift -= RADIX_TREE_MAP_SHIFT; |
| 714 | slot = rcu_dereference(slot->slots[i]); | 714 | slot = rcu_dereference_raw(slot->slots[i]); |
| 715 | if (slot == NULL) | 715 | if (slot == NULL) |
| 716 | goto out; | 716 | goto out; |
| 717 | } | 717 | } |
| @@ -758,7 +758,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results, | |||
| 758 | unsigned long cur_index = first_index; | 758 | unsigned long cur_index = first_index; |
| 759 | unsigned int ret; | 759 | unsigned int ret; |
| 760 | 760 | ||
| 761 | node = rcu_dereference(root->rnode); | 761 | node = rcu_dereference_raw(root->rnode); |
| 762 | if (!node) | 762 | if (!node) |
| 763 | return 0; | 763 | return 0; |
| 764 | 764 | ||
| @@ -787,7 +787,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results, | |||
| 787 | slot = *(((void ***)results)[ret + i]); | 787 | slot = *(((void ***)results)[ret + i]); |
| 788 | if (!slot) | 788 | if (!slot) |
| 789 | continue; | 789 | continue; |
| 790 | results[ret + nr_found] = rcu_dereference(slot); | 790 | results[ret + nr_found] = rcu_dereference_raw(slot); |
| 791 | nr_found++; | 791 | nr_found++; |
| 792 | } | 792 | } |
| 793 | ret += nr_found; | 793 | ret += nr_found; |
| @@ -826,7 +826,7 @@ radix_tree_gang_lookup_slot(struct radix_tree_root *root, void ***results, | |||
| 826 | unsigned long cur_index = first_index; | 826 | unsigned long cur_index = first_index; |
| 827 | unsigned int ret; | 827 | unsigned int ret; |
| 828 | 828 | ||
| 829 | node = rcu_dereference(root->rnode); | 829 | node = rcu_dereference_raw(root->rnode); |
| 830 | if (!node) | 830 | if (!node) |
| 831 | return 0; | 831 | return 0; |
| 832 | 832 | ||
| @@ -915,7 +915,7 @@ __lookup_tag(struct radix_tree_node *slot, void ***results, unsigned long index, | |||
| 915 | } | 915 | } |
| 916 | } | 916 | } |
| 917 | shift -= RADIX_TREE_MAP_SHIFT; | 917 | shift -= RADIX_TREE_MAP_SHIFT; |
| 918 | slot = rcu_dereference(slot->slots[i]); | 918 | slot = rcu_dereference_raw(slot->slots[i]); |
| 919 | if (slot == NULL) | 919 | if (slot == NULL) |
| 920 | break; | 920 | break; |
| 921 | } | 921 | } |
| @@ -951,7 +951,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results, | |||
| 951 | if (!root_tag_get(root, tag)) | 951 | if (!root_tag_get(root, tag)) |
| 952 | return 0; | 952 | return 0; |
| 953 | 953 | ||
| 954 | node = rcu_dereference(root->rnode); | 954 | node = rcu_dereference_raw(root->rnode); |
| 955 | if (!node) | 955 | if (!node) |
| 956 | return 0; | 956 | return 0; |
| 957 | 957 | ||
| @@ -980,7 +980,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results, | |||
| 980 | slot = *(((void ***)results)[ret + i]); | 980 | slot = *(((void ***)results)[ret + i]); |
| 981 | if (!slot) | 981 | if (!slot) |
| 982 | continue; | 982 | continue; |
| 983 | results[ret + nr_found] = rcu_dereference(slot); | 983 | results[ret + nr_found] = rcu_dereference_raw(slot); |
| 984 | nr_found++; | 984 | nr_found++; |
| 985 | } | 985 | } |
| 986 | ret += nr_found; | 986 | ret += nr_found; |
| @@ -1020,7 +1020,7 @@ radix_tree_gang_lookup_tag_slot(struct radix_tree_root *root, void ***results, | |||
| 1020 | if (!root_tag_get(root, tag)) | 1020 | if (!root_tag_get(root, tag)) |
| 1021 | return 0; | 1021 | return 0; |
| 1022 | 1022 | ||
| 1023 | node = rcu_dereference(root->rnode); | 1023 | node = rcu_dereference_raw(root->rnode); |
| 1024 | if (!node) | 1024 | if (!node) |
| 1025 | return 0; | 1025 | return 0; |
| 1026 | 1026 | ||
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 3b8aeec4e327..af4aaa6c36f3 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c | |||
| @@ -681,24 +681,55 @@ static char *mac_address_string(char *buf, char *end, u8 *addr, | |||
| 681 | char mac_addr[sizeof("xx:xx:xx:xx:xx:xx")]; | 681 | char mac_addr[sizeof("xx:xx:xx:xx:xx:xx")]; |
| 682 | char *p = mac_addr; | 682 | char *p = mac_addr; |
| 683 | int i; | 683 | int i; |
| 684 | char separator; | ||
| 685 | |||
| 686 | if (fmt[1] == 'F') { /* FDDI canonical format */ | ||
| 687 | separator = '-'; | ||
| 688 | } else { | ||
| 689 | separator = ':'; | ||
| 690 | } | ||
| 684 | 691 | ||
| 685 | for (i = 0; i < 6; i++) { | 692 | for (i = 0; i < 6; i++) { |
| 686 | p = pack_hex_byte(p, addr[i]); | 693 | p = pack_hex_byte(p, addr[i]); |
| 687 | if (fmt[0] == 'M' && i != 5) | 694 | if (fmt[0] == 'M' && i != 5) |
| 688 | *p++ = ':'; | 695 | *p++ = separator; |
| 689 | } | 696 | } |
| 690 | *p = '\0'; | 697 | *p = '\0'; |
| 691 | 698 | ||
| 692 | return string(buf, end, mac_addr, spec); | 699 | return string(buf, end, mac_addr, spec); |
| 693 | } | 700 | } |
| 694 | 701 | ||
| 695 | static char *ip4_string(char *p, const u8 *addr, bool leading_zeros) | 702 | static char *ip4_string(char *p, const u8 *addr, const char *fmt) |
| 696 | { | 703 | { |
| 697 | int i; | 704 | int i; |
| 698 | 705 | bool leading_zeros = (fmt[0] == 'i'); | |
| 706 | int index; | ||
| 707 | int step; | ||
| 708 | |||
| 709 | switch (fmt[2]) { | ||
| 710 | case 'h': | ||
| 711 | #ifdef __BIG_ENDIAN | ||
| 712 | index = 0; | ||
| 713 | step = 1; | ||
| 714 | #else | ||
| 715 | index = 3; | ||
| 716 | step = -1; | ||
| 717 | #endif | ||
| 718 | break; | ||
| 719 | case 'l': | ||
| 720 | index = 3; | ||
| 721 | step = -1; | ||
| 722 | break; | ||
| 723 | case 'n': | ||
| 724 | case 'b': | ||
| 725 | default: | ||
| 726 | index = 0; | ||
| 727 | step = 1; | ||
| 728 | break; | ||
| 729 | } | ||
| 699 | for (i = 0; i < 4; i++) { | 730 | for (i = 0; i < 4; i++) { |
| 700 | char temp[3]; /* hold each IP quad in reverse order */ | 731 | char temp[3]; /* hold each IP quad in reverse order */ |
| 701 | int digits = put_dec_trunc(temp, addr[i]) - temp; | 732 | int digits = put_dec_trunc(temp, addr[index]) - temp; |
| 702 | if (leading_zeros) { | 733 | if (leading_zeros) { |
| 703 | if (digits < 3) | 734 | if (digits < 3) |
| 704 | *p++ = '0'; | 735 | *p++ = '0'; |
| @@ -710,6 +741,7 @@ static char *ip4_string(char *p, const u8 *addr, bool leading_zeros) | |||
| 710 | *p++ = temp[digits]; | 741 | *p++ = temp[digits]; |
| 711 | if (i < 3) | 742 | if (i < 3) |
| 712 | *p++ = '.'; | 743 | *p++ = '.'; |
| 744 | index += step; | ||
| 713 | } | 745 | } |
| 714 | *p = '\0'; | 746 | *p = '\0'; |
| 715 | 747 | ||
| @@ -789,7 +821,7 @@ static char *ip6_compressed_string(char *p, const char *addr) | |||
| 789 | if (useIPv4) { | 821 | if (useIPv4) { |
| 790 | if (needcolon) | 822 | if (needcolon) |
| 791 | *p++ = ':'; | 823 | *p++ = ':'; |
| 792 | p = ip4_string(p, &in6.s6_addr[12], false); | 824 | p = ip4_string(p, &in6.s6_addr[12], "I4"); |
| 793 | } | 825 | } |
| 794 | *p = '\0'; | 826 | *p = '\0'; |
| 795 | 827 | ||
| @@ -829,7 +861,7 @@ static char *ip4_addr_string(char *buf, char *end, const u8 *addr, | |||
| 829 | { | 861 | { |
| 830 | char ip4_addr[sizeof("255.255.255.255")]; | 862 | char ip4_addr[sizeof("255.255.255.255")]; |
| 831 | 863 | ||
| 832 | ip4_string(ip4_addr, addr, fmt[0] == 'i'); | 864 | ip4_string(ip4_addr, addr, fmt); |
| 833 | 865 | ||
| 834 | return string(buf, end, ip4_addr, spec); | 866 | return string(buf, end, ip4_addr, spec); |
| 835 | } | 867 | } |
| @@ -896,12 +928,15 @@ static char *uuid_string(char *buf, char *end, const u8 *addr, | |||
| 896 | * - 'M' For a 6-byte MAC address, it prints the address in the | 928 | * - 'M' For a 6-byte MAC address, it prints the address in the |
| 897 | * usual colon-separated hex notation | 929 | * usual colon-separated hex notation |
| 898 | * - 'm' For a 6-byte MAC address, it prints the hex address without colons | 930 | * - 'm' For a 6-byte MAC address, it prints the hex address without colons |
| 931 | * - 'MF' For a 6-byte MAC FDDI address, it prints the address | ||
| 932 | * with a dash-separated hex notation | ||
| 899 | * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way | 933 | * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way |
| 900 | * IPv4 uses dot-separated decimal without leading 0's (1.2.3.4) | 934 | * IPv4 uses dot-separated decimal without leading 0's (1.2.3.4) |
| 901 | * IPv6 uses colon separated network-order 16 bit hex with leading 0's | 935 | * IPv6 uses colon separated network-order 16 bit hex with leading 0's |
| 902 | * - 'i' [46] for 'raw' IPv4/IPv6 addresses | 936 | * - 'i' [46] for 'raw' IPv4/IPv6 addresses |
| 903 | * IPv6 omits the colons (01020304...0f) | 937 | * IPv6 omits the colons (01020304...0f) |
| 904 | * IPv4 uses dot-separated decimal with leading 0's (010.123.045.006) | 938 | * IPv4 uses dot-separated decimal with leading 0's (010.123.045.006) |
| 939 | * - '[Ii]4[hnbl]' IPv4 addresses in host, network, big or little endian order | ||
| 905 | * - 'I6c' for IPv6 addresses printed as specified by | 940 | * - 'I6c' for IPv6 addresses printed as specified by |
| 906 | * http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-00 | 941 | * http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-00 |
| 907 | * - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form | 942 | * - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form |
| @@ -939,6 +974,7 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, | |||
| 939 | return resource_string(buf, end, ptr, spec, fmt); | 974 | return resource_string(buf, end, ptr, spec, fmt); |
| 940 | case 'M': /* Colon separated: 00:01:02:03:04:05 */ | 975 | case 'M': /* Colon separated: 00:01:02:03:04:05 */ |
| 941 | case 'm': /* Contiguous: 000102030405 */ | 976 | case 'm': /* Contiguous: 000102030405 */ |
| 977 | /* [mM]F (FDDI, bit reversed) */ | ||
| 942 | return mac_address_string(buf, end, ptr, spec, fmt); | 978 | return mac_address_string(buf, end, ptr, spec, fmt); |
| 943 | case 'I': /* Formatted IP supported | 979 | case 'I': /* Formatted IP supported |
| 944 | * 4: 1.2.3.4 | 980 | * 4: 1.2.3.4 |
