diff options
| author | Jeff Garzik <jgarzik@pobox.com> | 2005-10-18 17:16:06 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-18 17:16:06 -0400 |
| commit | 5a476deff3d17093da39c4eccb2692ba714dcb11 (patch) | |
| tree | 16f5c745a3c8ac780a218ad3d43e32f33164bcf5 /include | |
| parent | dd4efa44ebf2a8a0e5edf60a53eadec981b4b10a (diff) | |
| parent | 39ca371c45b04cd50d0974030ae051906fc516b6 (diff) | |
Merge branch 'master'
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-arm/arch-pxa/pxafb.h | 1 | ||||
| -rw-r--r-- | include/asm-arm/arch-s3c2410/io.h | 58 | ||||
| -rw-r--r-- | include/asm-sparc64/pbm.h | 30 | ||||
| -rw-r--r-- | include/linux/acct.h | 4 | ||||
| -rw-r--r-- | include/linux/aio.h | 7 | ||||
| -rw-r--r-- | include/linux/cpumask.h | 16 | ||||
| -rw-r--r-- | include/linux/list.h | 39 | ||||
| -rw-r--r-- | include/linux/rcupdate.h | 1 |
8 files changed, 90 insertions, 66 deletions
diff --git a/include/asm-arm/arch-pxa/pxafb.h b/include/asm-arm/arch-pxa/pxafb.h index 21c0e16dce5f..aba9b30f4249 100644 --- a/include/asm-arm/arch-pxa/pxafb.h +++ b/include/asm-arm/arch-pxa/pxafb.h | |||
| @@ -66,4 +66,5 @@ struct pxafb_mach_info { | |||
| 66 | 66 | ||
| 67 | }; | 67 | }; |
| 68 | void set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info); | 68 | void set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info); |
| 69 | void set_pxa_fb_parent(struct device *parent_dev); | ||
| 69 | unsigned long pxafb_get_hsync_time(struct device *dev); | 70 | unsigned long pxafb_get_hsync_time(struct device *dev); |
diff --git a/include/asm-arm/arch-s3c2410/io.h b/include/asm-arm/arch-s3c2410/io.h index 418233a7ee6f..4bf272ed9add 100644 --- a/include/asm-arm/arch-s3c2410/io.h +++ b/include/asm-arm/arch-s3c2410/io.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | * 06-Dec-1997 RMK Created. | 9 | * 06-Dec-1997 RMK Created. |
| 10 | * 02-Sep-2003 BJD Modified for S3C2410 | 10 | * 02-Sep-2003 BJD Modified for S3C2410 |
| 11 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | 11 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA |
| 12 | * | 12 | * 13-Oct-2005 BJD Fixed problems with LDRH/STRH offset range |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #ifndef __ASM_ARM_ARCH_IO_H | 15 | #ifndef __ASM_ARM_ARCH_IO_H |
| @@ -97,7 +97,7 @@ DECLARE_IO(int,l,"") | |||
| 97 | else \ | 97 | else \ |
| 98 | __asm__ __volatile__( \ | 98 | __asm__ __volatile__( \ |
| 99 | "strb %0, [%1, #0] @ outbc" \ | 99 | "strb %0, [%1, #0] @ outbc" \ |
| 100 | : : "r" (value), "r" ((port))); \ | 100 | : : "r" (value), "r" ((port))); \ |
| 101 | }) | 101 | }) |
| 102 | 102 | ||
| 103 | #define __inbc(port) \ | 103 | #define __inbc(port) \ |
| @@ -110,35 +110,61 @@ DECLARE_IO(int,l,"") | |||
| 110 | else \ | 110 | else \ |
| 111 | __asm__ __volatile__( \ | 111 | __asm__ __volatile__( \ |
| 112 | "ldrb %0, [%1, #0] @ inbc" \ | 112 | "ldrb %0, [%1, #0] @ inbc" \ |
| 113 | : "=r" (result) : "r" ((port))); \ | 113 | : "=r" (result) : "r" ((port))); \ |
| 114 | result; \ | 114 | result; \ |
| 115 | }) | 115 | }) |
| 116 | 116 | ||
| 117 | #define __outwc(value,port) \ | 117 | #define __outwc(value,port) \ |
| 118 | ({ \ | 118 | ({ \ |
| 119 | unsigned long v = value; \ | 119 | unsigned long v = value; \ |
| 120 | if (__PORT_PCIO((port))) \ | 120 | if (__PORT_PCIO((port))) { \ |
| 121 | __asm__ __volatile__( \ | 121 | if ((port) < 256 && (port) > -256) \ |
| 122 | "strh %0, [%1, %2] @ outwc" \ | 122 | __asm__ __volatile__( \ |
| 123 | : : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \ | 123 | "strh %0, [%1, %2] @ outwc" \ |
| 124 | else \ | 124 | : : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \ |
| 125 | else if ((port) > 0) \ | ||
| 126 | __asm__ __volatile__( \ | ||
| 127 | "strh %0, [%1, %2] @ outwc" \ | ||
| 128 | : : "r" (v), \ | ||
| 129 | "r" (PCIO_BASE + ((port) & ~0xff)), \ | ||
| 130 | "Jr" (((port) & 0xff))); \ | ||
| 131 | else \ | ||
| 132 | __asm__ __volatile__( \ | ||
| 133 | "strh %0, [%1, #0] @ outwc" \ | ||
| 134 | : : "r" (v), \ | ||
| 135 | "r" (PCIO_BASE + (port))); \ | ||
| 136 | } else \ | ||
| 125 | __asm__ __volatile__( \ | 137 | __asm__ __volatile__( \ |
| 126 | "strh %0, [%1, #0] @ outwc" \ | 138 | "strh %0, [%1, #0] @ outwc" \ |
| 127 | : : "r" (v), "r" ((port))); \ | 139 | : : "r" (v), "r" ((port))); \ |
| 128 | }) | 140 | }) |
| 129 | 141 | ||
| 130 | #define __inwc(port) \ | 142 | #define __inwc(port) \ |
| 131 | ({ \ | 143 | ({ \ |
| 132 | unsigned short result; \ | 144 | unsigned short result; \ |
| 133 | if (__PORT_PCIO((port))) \ | 145 | if (__PORT_PCIO((port))) { \ |
| 134 | __asm__ __volatile__( \ | 146 | if ((port) < 256 && (port) > -256 ) \ |
| 135 | "ldrh %0, [%1, %2] @ inwc" \ | 147 | __asm__ __volatile__( \ |
| 136 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port))); \ | 148 | "ldrh %0, [%1, %2] @ inwc" \ |
| 137 | else \ | 149 | : "=r" (result) \ |
| 150 | : "r" (PCIO_BASE), \ | ||
| 151 | "Jr" ((port))); \ | ||
| 152 | else if ((port) > 0) \ | ||
| 153 | __asm__ __volatile__( \ | ||
| 154 | "ldrh %0, [%1, %2] @ inwc" \ | ||
| 155 | : "=r" (result) \ | ||
| 156 | : "r" (PCIO_BASE + ((port) & ~0xff)), \ | ||
| 157 | "Jr" (((port) & 0xff))); \ | ||
| 158 | else \ | ||
| 159 | __asm__ __volatile__( \ | ||
| 160 | "ldrh %0, [%1, #0] @ inwc" \ | ||
| 161 | : "=r" (result) \ | ||
| 162 | : "r" (PCIO_BASE + ((port)))); \ | ||
| 163 | } else \ | ||
| 138 | __asm__ __volatile__( \ | 164 | __asm__ __volatile__( \ |
| 139 | "ldrh %0, [%1, #0] @ inwc" \ | 165 | "ldrh %0, [%1, #0] @ inwc" \ |
| 140 | : "=r" (result) : "r" ((port))); \ | 166 | : "=r" (result) : "r" ((port))); \ |
| 141 | result; \ | 167 | result; \ |
| 142 | }) | 168 | }) |
| 143 | 169 | ||
| 144 | #define __outlc(value,port) \ | 170 | #define __outlc(value,port) \ |
diff --git a/include/asm-sparc64/pbm.h b/include/asm-sparc64/pbm.h index 38bbbccb4068..dd35a2c7798a 100644 --- a/include/asm-sparc64/pbm.h +++ b/include/asm-sparc64/pbm.h | |||
| @@ -27,23 +27,27 @@ | |||
| 27 | * PCI bus. | 27 | * PCI bus. |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #define PBM_LOGCLUSTERS 3 | ||
| 31 | #define PBM_NCLUSTERS (1 << PBM_LOGCLUSTERS) | ||
| 32 | |||
| 33 | struct pci_controller_info; | 30 | struct pci_controller_info; |
| 34 | 31 | ||
| 35 | /* This contains the software state necessary to drive a PCI | 32 | /* This contains the software state necessary to drive a PCI |
| 36 | * controller's IOMMU. | 33 | * controller's IOMMU. |
| 37 | */ | 34 | */ |
| 35 | struct pci_iommu_arena { | ||
| 36 | unsigned long *map; | ||
| 37 | unsigned int hint; | ||
| 38 | unsigned int limit; | ||
| 39 | }; | ||
| 40 | |||
| 38 | struct pci_iommu { | 41 | struct pci_iommu { |
| 39 | /* This protects the controller's IOMMU and all | 42 | /* This protects the controller's IOMMU and all |
| 40 | * streaming buffers underneath. | 43 | * streaming buffers underneath. |
| 41 | */ | 44 | */ |
| 42 | spinlock_t lock; | 45 | spinlock_t lock; |
| 43 | 46 | ||
| 47 | struct pci_iommu_arena arena; | ||
| 48 | |||
| 44 | /* IOMMU page table, a linear array of ioptes. */ | 49 | /* IOMMU page table, a linear array of ioptes. */ |
| 45 | iopte_t *page_table; /* The page table itself. */ | 50 | iopte_t *page_table; /* The page table itself. */ |
| 46 | int page_table_sz_bits; /* log2 of ow many pages does it map? */ | ||
| 47 | 51 | ||
| 48 | /* Base PCI memory space address where IOMMU mappings | 52 | /* Base PCI memory space address where IOMMU mappings |
| 49 | * begin. | 53 | * begin. |
| @@ -62,12 +66,6 @@ struct pci_iommu { | |||
| 62 | */ | 66 | */ |
| 63 | unsigned long write_complete_reg; | 67 | unsigned long write_complete_reg; |
| 64 | 68 | ||
| 65 | /* The lowest used consistent mapping entry. Since | ||
| 66 | * we allocate consistent maps out of cluster 0 this | ||
| 67 | * is relative to the beginning of closter 0. | ||
| 68 | */ | ||
| 69 | u32 lowest_consistent_map; | ||
| 70 | |||
| 71 | /* In order to deal with some buggy third-party PCI bridges that | 69 | /* In order to deal with some buggy third-party PCI bridges that |
| 72 | * do wrong prefetching, we never mark valid mappings as invalid. | 70 | * do wrong prefetching, we never mark valid mappings as invalid. |
| 73 | * Instead we point them at this dummy page. | 71 | * Instead we point them at this dummy page. |
| @@ -75,16 +73,6 @@ struct pci_iommu { | |||
| 75 | unsigned long dummy_page; | 73 | unsigned long dummy_page; |
| 76 | unsigned long dummy_page_pa; | 74 | unsigned long dummy_page_pa; |
| 77 | 75 | ||
| 78 | /* If PBM_NCLUSTERS is ever decreased to 4 or lower, | ||
| 79 | * or if largest supported page_table_sz * 8K goes above | ||
| 80 | * 2GB, you must increase the size of the type of | ||
| 81 | * these counters. You have been duly warned. -DaveM | ||
| 82 | */ | ||
| 83 | struct { | ||
| 84 | u16 next; | ||
| 85 | u16 flush; | ||
| 86 | } alloc_info[PBM_NCLUSTERS]; | ||
| 87 | |||
| 88 | /* CTX allocation. */ | 76 | /* CTX allocation. */ |
| 89 | unsigned long ctx_lowest_free; | 77 | unsigned long ctx_lowest_free; |
| 90 | unsigned long ctx_bitmap[IOMMU_NUM_CTXS / (sizeof(unsigned long) * 8)]; | 78 | unsigned long ctx_bitmap[IOMMU_NUM_CTXS / (sizeof(unsigned long) * 8)]; |
| @@ -102,7 +90,7 @@ struct pci_iommu { | |||
| 102 | u32 dma_addr_mask; | 90 | u32 dma_addr_mask; |
| 103 | }; | 91 | }; |
| 104 | 92 | ||
| 105 | extern void pci_iommu_table_init(struct pci_iommu *, int); | 93 | extern void pci_iommu_table_init(struct pci_iommu *iommu, int tsbsize, u32 dma_offset, u32 dma_addr_mask); |
| 106 | 94 | ||
| 107 | /* This describes a PCI bus module's streaming buffer. */ | 95 | /* This describes a PCI bus module's streaming buffer. */ |
| 108 | struct pci_strbuf { | 96 | struct pci_strbuf { |
diff --git a/include/linux/acct.h b/include/linux/acct.h index 1993a3691768..19f70462b3be 100644 --- a/include/linux/acct.h +++ b/include/linux/acct.h | |||
| @@ -162,13 +162,13 @@ typedef struct acct acct_t; | |||
| 162 | #ifdef __KERNEL__ | 162 | #ifdef __KERNEL__ |
| 163 | /* | 163 | /* |
| 164 | * Yet another set of HZ to *HZ helper functions. | 164 | * Yet another set of HZ to *HZ helper functions. |
| 165 | * See <linux/times.h> for the original. | 165 | * See <linux/jiffies.h> for the original. |
| 166 | */ | 166 | */ |
| 167 | 167 | ||
| 168 | static inline u32 jiffies_to_AHZ(unsigned long x) | 168 | static inline u32 jiffies_to_AHZ(unsigned long x) |
| 169 | { | 169 | { |
| 170 | #if (TICK_NSEC % (NSEC_PER_SEC / AHZ)) == 0 | 170 | #if (TICK_NSEC % (NSEC_PER_SEC / AHZ)) == 0 |
| 171 | return x / (HZ / USER_HZ); | 171 | return x / (HZ / AHZ); |
| 172 | #else | 172 | #else |
| 173 | u64 tmp = (u64)x * TICK_NSEC; | 173 | u64 tmp = (u64)x * TICK_NSEC; |
| 174 | do_div(tmp, (NSEC_PER_SEC / AHZ)); | 174 | do_div(tmp, (NSEC_PER_SEC / AHZ)); |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 60def658b246..0decf66117c1 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
| @@ -24,7 +24,12 @@ struct kioctx; | |||
| 24 | #define KIOCB_SYNC_KEY (~0U) | 24 | #define KIOCB_SYNC_KEY (~0U) |
| 25 | 25 | ||
| 26 | /* ki_flags bits */ | 26 | /* ki_flags bits */ |
| 27 | #define KIF_LOCKED 0 | 27 | /* |
| 28 | * This may be used for cancel/retry serialization in the future, but | ||
| 29 | * for now it's unused and we probably don't want modules to even | ||
| 30 | * think they can use it. | ||
| 31 | */ | ||
| 32 | /* #define KIF_LOCKED 0 */ | ||
| 28 | #define KIF_KICKED 1 | 33 | #define KIF_KICKED 1 |
| 29 | #define KIF_CANCELLED 2 | 34 | #define KIF_CANCELLED 2 |
| 30 | 35 | ||
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index fe9778301d07..9bdba8169b41 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
| @@ -393,15 +393,13 @@ extern cpumask_t cpu_present_map; | |||
| 393 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) | 393 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) |
| 394 | 394 | ||
| 395 | /* Find the highest possible smp_processor_id() */ | 395 | /* Find the highest possible smp_processor_id() */ |
| 396 | static inline unsigned int highest_possible_processor_id(void) | 396 | #define highest_possible_processor_id() \ |
| 397 | { | 397 | ({ \ |
| 398 | unsigned int cpu, highest = 0; | 398 | unsigned int cpu, highest = 0; \ |
| 399 | 399 | for_each_cpu_mask(cpu, cpu_possible_map) \ | |
| 400 | for_each_cpu_mask(cpu, cpu_possible_map) | 400 | highest = cpu; \ |
| 401 | highest = cpu; | 401 | highest; \ |
| 402 | 402 | }) | |
| 403 | return highest; | ||
| 404 | } | ||
| 405 | 403 | ||
| 406 | 404 | ||
| 407 | #endif /* __LINUX_CPUMASK_H */ | 405 | #endif /* __LINUX_CPUMASK_H */ |
diff --git a/include/linux/list.h b/include/linux/list.h index e6ec59682274..084971f333fe 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
| @@ -442,12 +442,14 @@ static inline void list_splice_init(struct list_head *list, | |||
| 442 | * as long as the traversal is guarded by rcu_read_lock(). | 442 | * as long as the traversal is guarded by rcu_read_lock(). |
| 443 | */ | 443 | */ |
| 444 | #define list_for_each_rcu(pos, head) \ | 444 | #define list_for_each_rcu(pos, head) \ |
| 445 | for (pos = (head)->next; prefetch(pos->next), pos != (head); \ | 445 | for (pos = (head)->next; \ |
| 446 | pos = rcu_dereference(pos->next)) | 446 | prefetch(rcu_dereference(pos)->next), pos != (head); \ |
| 447 | pos = pos->next) | ||
| 447 | 448 | ||
| 448 | #define __list_for_each_rcu(pos, head) \ | 449 | #define __list_for_each_rcu(pos, head) \ |
| 449 | for (pos = (head)->next; pos != (head); \ | 450 | for (pos = (head)->next; \ |
| 450 | pos = rcu_dereference(pos->next)) | 451 | rcu_dereference(pos) != (head); \ |
| 452 | pos = pos->next) | ||
| 451 | 453 | ||
| 452 | /** | 454 | /** |
| 453 | * list_for_each_safe_rcu - iterate over an rcu-protected list safe | 455 | * list_for_each_safe_rcu - iterate over an rcu-protected list safe |
| @@ -461,8 +463,9 @@ static inline void list_splice_init(struct list_head *list, | |||
| 461 | * as long as the traversal is guarded by rcu_read_lock(). | 463 | * as long as the traversal is guarded by rcu_read_lock(). |
| 462 | */ | 464 | */ |
| 463 | #define list_for_each_safe_rcu(pos, n, head) \ | 465 | #define list_for_each_safe_rcu(pos, n, head) \ |
| 464 | for (pos = (head)->next, n = pos->next; pos != (head); \ | 466 | for (pos = (head)->next; \ |
| 465 | pos = rcu_dereference(n), n = pos->next) | 467 | n = rcu_dereference(pos)->next, pos != (head); \ |
| 468 | pos = n) | ||
| 466 | 469 | ||
| 467 | /** | 470 | /** |
| 468 | * list_for_each_entry_rcu - iterate over rcu list of given type | 471 | * list_for_each_entry_rcu - iterate over rcu list of given type |
| @@ -474,11 +477,11 @@ static inline void list_splice_init(struct list_head *list, | |||
| 474 | * the _rcu list-mutation primitives such as list_add_rcu() | 477 | * the _rcu list-mutation primitives such as list_add_rcu() |
| 475 | * as long as the traversal is guarded by rcu_read_lock(). | 478 | * as long as the traversal is guarded by rcu_read_lock(). |
| 476 | */ | 479 | */ |
| 477 | #define list_for_each_entry_rcu(pos, head, member) \ | 480 | #define list_for_each_entry_rcu(pos, head, member) \ |
| 478 | for (pos = list_entry((head)->next, typeof(*pos), member); \ | 481 | for (pos = list_entry((head)->next, typeof(*pos), member); \ |
| 479 | prefetch(pos->member.next), &pos->member != (head); \ | 482 | prefetch(rcu_dereference(pos)->member.next), \ |
| 480 | pos = rcu_dereference(list_entry(pos->member.next, \ | 483 | &pos->member != (head); \ |
| 481 | typeof(*pos), member))) | 484 | pos = list_entry(pos->member.next, typeof(*pos), member)) |
| 482 | 485 | ||
| 483 | 486 | ||
| 484 | /** | 487 | /** |
| @@ -492,8 +495,9 @@ static inline void list_splice_init(struct list_head *list, | |||
| 492 | * as long as the traversal is guarded by rcu_read_lock(). | 495 | * as long as the traversal is guarded by rcu_read_lock(). |
| 493 | */ | 496 | */ |
| 494 | #define list_for_each_continue_rcu(pos, head) \ | 497 | #define list_for_each_continue_rcu(pos, head) \ |
| 495 | for ((pos) = (pos)->next; prefetch((pos)->next), (pos) != (head); \ | 498 | for ((pos) = (pos)->next; \ |
| 496 | (pos) = rcu_dereference((pos)->next)) | 499 | prefetch(rcu_dereference((pos))->next), (pos) != (head); \ |
| 500 | (pos) = (pos)->next) | ||
| 497 | 501 | ||
| 498 | /* | 502 | /* |
| 499 | * Double linked lists with a single pointer list head. | 503 | * Double linked lists with a single pointer list head. |
| @@ -696,8 +700,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
| 696 | pos = n) | 700 | pos = n) |
| 697 | 701 | ||
| 698 | #define hlist_for_each_rcu(pos, head) \ | 702 | #define hlist_for_each_rcu(pos, head) \ |
| 699 | for ((pos) = (head)->first; pos && ({ prefetch((pos)->next); 1; }); \ | 703 | for ((pos) = (head)->first; \ |
| 700 | (pos) = rcu_dereference((pos)->next)) | 704 | rcu_dereference((pos)) && ({ prefetch((pos)->next); 1; }); \ |
| 705 | (pos) = (pos)->next) | ||
| 701 | 706 | ||
| 702 | /** | 707 | /** |
| 703 | * hlist_for_each_entry - iterate over list of given type | 708 | * hlist_for_each_entry - iterate over list of given type |
| @@ -762,9 +767,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
| 762 | */ | 767 | */ |
| 763 | #define hlist_for_each_entry_rcu(tpos, pos, head, member) \ | 768 | #define hlist_for_each_entry_rcu(tpos, pos, head, member) \ |
| 764 | for (pos = (head)->first; \ | 769 | for (pos = (head)->first; \ |
| 765 | pos && ({ prefetch(pos->next); 1;}) && \ | 770 | rcu_dereference(pos) && ({ prefetch(pos->next); 1;}) && \ |
| 766 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 771 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
| 767 | pos = rcu_dereference(pos->next)) | 772 | pos = pos->next) |
| 768 | 773 | ||
| 769 | #else | 774 | #else |
| 770 | #warning "don't include kernel headers in userspace" | 775 | #warning "don't include kernel headers in userspace" |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 4e65eb44adfd..70191a5a148f 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -94,6 +94,7 @@ struct rcu_data { | |||
| 94 | long batch; /* Batch # for current RCU batch */ | 94 | long batch; /* Batch # for current RCU batch */ |
| 95 | struct rcu_head *nxtlist; | 95 | struct rcu_head *nxtlist; |
| 96 | struct rcu_head **nxttail; | 96 | struct rcu_head **nxttail; |
| 97 | long count; /* # of queued items */ | ||
| 97 | struct rcu_head *curlist; | 98 | struct rcu_head *curlist; |
| 98 | struct rcu_head **curtail; | 99 | struct rcu_head **curtail; |
| 99 | struct rcu_head *donelist; | 100 | struct rcu_head *donelist; |
