RCU

Read - Copy - Update

Supplemental Response 23 October 2003 (63-A)

Pages 7-19: Linux kernel 2.5.69

This document, dated the 23rd day of October 20003 (sic), listed 591 files "which may, on information and belief, include information (including methods) that IBM was required to maintain as confidential or proprietary pursuant to contract with SCO and/or which constitute trade secrets misused by IBM are found within Linux 2.4 and/or Linux 2.5 kernels under the following source file headings". There followed what was apparently a lightly filtered list of every file in the Linux 2.5.69 kernel [download] that contain the words "SMP", "RCU" and "NUMA", plus all the JFS files. See Frank Sorenson's superb analysis. Of those 591 files, the 11 files listed below are those that contain the word "RCU".

fs/compat.c
fs/dcache.c
fs/namei.c
include/linux/list.h
include/linux/rcupdate.h
ipc/util.c
ipc/util.h
kernel/rcupdate.c
net/bridge/br_if.c
net/bridge/br_private.h
net/decnet/dn_route.c

Total 11 files

Revised Supplemental Response 15 January 2004 (103-1)

Pages 4-7: the rclock patch

The files listed are from the first rclock patch (for Linux 2.4.1) [download] from the Linux Scalability Effort rclock project. The patch was released on 9 April 2001. The patch touches a total of 14 files, of which nine are listed in the document. The other files are Documentation/rclock.txt, arch/i386/config.in, kernel/Makefile, kernel/ksyms.c and kernel/sched.c.

DynixV v4.6.1 filelines2.4.1-01 filelines
kernel/sys/rclock.hunspecifiedinclude/linux/rclock.hall
kernel/os/rclock.cunspecifiedkernel/rclock.call
kernel/sys/kma_defer.hunspecifiedinclude/linux/kmemdef.hall
kernel/os/kma_defer.cunspecifiedkernel/kmemdef.call
kernel/os/kern_clock.c2028-2059arch/i386/kernel/apic.c25-28 662-664 676-684
kernel/timer.c26-29 681-683 688-697
kernel/i386/locore.s1487-1497arch/i386/kernel/entry.S199-205
kernel/i386/trap.c1554-1563arch/i386/kernel/traps.c52-54 244-247 331-334 542-545 659-662 718-721
kernel/i386/startup.c2054init/main.c30-33 609-616

Total 9 files

The same information is present in the subsequent Second Amended Complaint of 27 February 2004 (108), which remains in effect today, and also in the rejected Third Amended Complaint of 14 October 2004 (323-1).

The inclusion of arch/i386/kernel/apic.c may explain the subsequent bizarre objection to a patch against it - see Item 236.

Pages 7-13: Linux kernel 2.6.0

The files listed are from Linux 2.6.0 [download] [copying]. It was released on 18 December 2003. The next release was 2.6.1 on 9 January 2004. This document is dated 15 January 2004. It catalogues use of RCU in the Kernel - "These files use RCU functions and macros - and if they are used, then the RCU functionality is used, too. The number of lines and number of files, although substantial, is less significant than the impact of the changes, which is dramatic for networking, device drivers, lists, and directory access."

Structure / Sequence DynixV file Lines Linux 2.6.0 file Lines
Register an RCU callbackkernel/sys/rclock.h412include/linux/rcupdate.h131-132
Register an RCU callbackkernel/os/rclock.c503-613kernel/rcupdate.c58-80
RCU callback control structurekernel/sys/rclock.h217-228include/linux/rcupdate.h66-72
RCU callback listskernel/sys/rclock.h238-241include/linux/rcupdate.h87-108
RCU callback listskernel/i386/plocal.h1517-1537include/linux/rcupdate.h87-108
RCU comparison operatorskernel/sys/rclock.h300-312include/linux/rcupdate.h75-85
Force cache writekernel/sys/rclock.h331-358include/asm-alpha/system.h152-153 159 164
Force cache writekernel/sys/rclock.h331-358include/asm-arm/system.h104 228 235
Force cache writekernel/sys/rclock.h331-358include/asm-arm26/system.h197
Force cache writekernel/sys/rclock.h331-358include/asm-cris/system.h3 27 32
Force cache writekernel/sys/rclock.h331-358include/asm-h8300/system.h97 102
Force cache writekernel/sys/rclock.h331-358include/asm-i386/system.h368-420 434 440
Force cache writekernel/sys/rclock.h331-358include/asm-ia64/system.h83 89 94
Force cache writekernel/sys/rclock.h331-358include/asm-m68k/system.h80 87
Force cache writekernel/sys/rclock.h331-358include/asm-m68knommu/system.h105 110
Force cache writekernel/sys/rclock.h331-358include/asm-mips/system.h145-197 256 261
Force cache writekernel/sys/rclock.h331-358include/asm-parisc/system.h134-135
Force cache writekernel/sys/rclock.h331-358include/asm-ppc/system.h24-25 34 43 48
Force cache writekernel/sys/rclock.h331-358include/asm-ppc64/system.h28-29 38 47 52
Force cache writekernel/sys/rclock.h331-358include/asm-s390/system.h255 259
Force cache writekernel/sys/rclock.h331-358include/asm-sh/system.h80 86 91
Force cache writekernel/sys/rclock.h331-358include/asm-sparc/system.h281 287
Force cache writekernel/sys/rclock.h331-358include/asm-sparc64/system.h86 96 101
Force cache writekernel/sys/rclock.h331-358include/asm-v850/system.h70 78
Force cache writekernel/sys/rclock.h331-358include/asm-x86_64/system.h283 288 305
RCU read protectkernel/sys/rclock.h373-387include/linux/rcupdate.h124-125
RCU read protectkernel/os/rclock.c1758-1825include/linux/rcupdate.h124-125
RCU read protectkernel/os/rclock.c503-613kernel/rcupdate.c58-80
Call checkerkernel/os/kern_clock.c2028-2059include/linux/rcupdate.h112-122
Call checkerkernel/os/kern_clock.c2028-2059kernel/sched.c1364-1365
RCU checkerkernel/sys/rclock.h411 415include/linux/rcupdate.h128
RCU checkerkernel/os/rclock.c385-468
659-752
1314-1494
kernel/rcupdate.c82-207
RCU initializationkernel/sys/rclock.h414include/linux/rcupdate.h127
RCU initializationkernel/os/rclock.c1222-1311kernel/rcupdate.c201-240
RCU usenet/core/netfilter.c73 83 357 516-517
548 558 575 612
RCU usenet/core/dev.c239 242 238 995-996
1027 1580-1581
1594 1614 2893
RCU usenet/ipv4/ip_input.c220 241 266
RCU usenet/ipv4/af_inet.c340-341 375
430 1012 1040
RCU usenet/ipv4/icmp.c707-712
RCU usenet/ipv4/route.c227 231 240 243 246
282 440 446 1004 1008
1026 1037 1076 1257
1260 1296 1852 1854
1867 1873 2219 2221
2235 2241 2451 2454
2462 2467
RCU usenet/bridge/br_device.c79 81
RCU usenet/bridge/br_ioctl.c78 97 159 161 179
RCU usenet/bridge/br_stp.c43
RCU usenet/bridge/br_private.h77
RCU usenet/bridge/br_input.c59 61 106 117 135
142 151 156
RCU usenet/bridge/br_forward.c77-97 120 147 151
RCU usenet/bridge/br_if.c64 72 160 269-270 273
RCU usenet/irda/irlan/irlan_common.c230 275 1083 1113
RCU usenet/irda/irlan/irlan_client.c172 182
RCU usenet/ipv6/icmp.c532 534 537
RCU usenet/ipv6/af_inet6.c173-174 208 271 275
279 614 640
RCU usenet/ipv6/ip6_input.c155 169 197 201
RCU usenet/802/psnap.c36 58 71 136 151
RCU usenet/decnet/dn_route.c149 156 1171 1173 1184
1189 1450 1452 1463 1468
1644 1646 1653 1658 1678
1682 1691 1694 1697 1723
RCU usedrivers/net/wireless/strip.c973 983 998 1006 2562
RCU usedrivers/net/wan/lapbether.c70 98 118 379 395
411 431
RCU usedrivers/net/hamradio/bpqether.c183 225 408 437 545
560 575 595
RCU usedrivers/char/ipmi/ipmi_kcs_intf.c1203
RCU usearch/i386/oprofile/nmi_timer_int.c41
RCU useinclude/linux/dcache.h96 180
RCU useinclude/linux/list.h83-124 152-167 367-414
462-477 487 499-508
RCU useinclude/net/dst.h77
RCU usefs/dcache.c81 986 993 1015 1038
1146 1232 1235
RCU usekernel/module.c1738
RCU useipc/util.c197 282 289 349 354 459
461 475 478 488 497
RCU useinit/main.c414

Total 55 files

Hatch letter 19 April 2004 (157-28-D)

Exhibit D: the rclock patch

As in the previous Revised Supplemental Response of 15 January 2004 (103-1 discussed above), the files listed are from the first rclock patch (for Linux 2.4.1) [download] from the Linux Scalability Effort rclock project which was released on 9 April 2001. This document supplements the previous one by providing specific line numbers for the four files previously objected to in their entirety. In three out of four cases, an considerable discrepancy is revealed between the number of lines said to have been directly copied from Dynix/ptx and the number of lines said to be in Linux.

Files & lines in Dynix v4.6.1 treeFiles & lines in code drop for Linux 2.4.1
kernel/sys/rclock.h175-228
243-423
(total 235)
include/linux/rclock.h40-132
137-162
190-195
230-305
307-310
(total 205, 66%)
kernel/os/rclock.c303-317
383-588
616-1825
(total 1431)
kernel/rclock.c48-80
85-187
189-1011
(total 823, 81%)
kernel/sys/kma_defer.h46-52
95-119
129-132
140
(total 37)
include/linux/kmemdef.h38-72
(total 35, 49%)
kernel/os/kma_defer.c191-353
370-427
550-582
603-703
(total 355)
kernel/kmemdef.c61-245
(total 185, 76%)

Total 4 files, 1248 lines

Gupta Declaration 7 July 2004 (467)

Pages 4-11: Linux kernel 2.6.5 and rclock patch

Gupta attempts to demonstrate substantial similarity between RCU in the Linux kernel version 2.6.5 and RCU in UNIX SVR4.2 MP (aka 4.2 ES/MP). The five acts he names are (i) "allocating a new data structure of a certain size", and, as revealed in IBM's reply (247 page 8), (ii) "copying the contents of the old data structure to the new data structure", (iii) "updating the new data structure", (iv) "updating or redirecting a pointer to point to the new data structure", and (v) arranging for deferred deletion of the old data structure". He goes on to complain of the first rclock patch for Linux 2.4.1 discussed above [download]. The entire patch is printed, in its unexpurgated unified diff glory, as Gupta's Exhibit E (497 p73-116).

Page 11: IPC locks breakup patch

At paragraph 29 Gupta states: "Another patch was also provided to Linux version 2.5.44 by IBM employee Mingming Cao. See Exhibit G. This patch appears to be incorporated into the Linux version 2.6." The patch printed in Exhibit G (497 p141-158) is in fact the Linux Scalability Effort's IPC Locks Breakup patch ipc-rcu-2544.patch [download]. The patch touches the following files:

include/linux/ipc.h
ipc/msg.c
ipc/sem.c
ipc/shm.c
ipc/util.c
ipc/util.h

Final Disclosure 22 December 2005

Item 2 (ongoing): Read-Copy-Update code [SCO 724 p.8]. Line-for-line copied code from derived works of System V created by IBM (or otherwise protected under the contracts) and contributed to Linux in violations of the IBM and Sequent Software Agreements [SCO 724 Appx A pp.2-3].