IABSD.fr/src

Branch :


Log

Author Commit Date CI Message
fecf25f8 2020-07-16 23:06:43 adjtime(2): distribute skew along arbitrary period on runtime clock The adjtime(2) adjustment is applied at up to 5000ppm/sec from tc_windup(). At the start of each UTC second, ntp_update_second() is called from tc_windup() and up to 5000ppm worth of skew is deducted from the timehands' th_adjtimedelta member and moved to the th_adjustment member. The resulting th_adjustment value is then mixed into the th_scale member and thus the system UTC time is slowly nudged in a particular direction. This works pretty well. The only issues have to do with the use of the the edge of the UTC second as the start of the ntp_update_second() period: 1. If the UTC clock jumps forward we can get stuck in a loop calling ntp_update_second() from tc_windup(). We work around this with a magic number, LARGE_STEP. If the UTC clock jumps forward more than LARGE_STEP seconds we truncate the number of iterations to 2. Per the comment in tc_windup(), we do 2 iterations instead of 1 iteration to account for a leap second we may have missed. This is an anachronism: the OpenBSD kernel does not handle leap seconds anymore. Such jumps happen during settimeofday(2), during boot when we jump the clock from zero to the RTC time, and during resume when we jump the clock to the RTC time (again). They are unavoidable. 2. Changes to adjtime(2) are applied asynchronously. For example, if you try to cancel the ongoing adjustment... struct timeval zero = { 0, 0 }; adjtime(&zero, NULL); ... it can take up to one second for the adjustment to be cancelled. In the meantime, the skew continues. This delayed application is not intuitive or documented. 3. Adjustment is deducted from th_adjtimedelta across suspends of fewer than LARGE_STEP seconds, even though we do not skew the clock while we are suspended. This is unintuitive, incorrect, and undocumented. We can avoid all of these problems by applying the adjustment along an arbitrary period on the runtime clock instead of the UTC clock. 1. The runtime clock doesn't jump arbitrary amounts, so we never get stuck in a loop and we don't need a magic number to test for this possibility. With the removal of the magic number LARGE_STEP we can also remove the leap second handling from the tc_windup() code. 2. With a new timehands member, th_next_ntp_update, we can track when the next ntp_update_second() call should happen on the runtime clock. This value can be updated during the adjtime(2) system call, so changes to the skew happen *immediately* instead of up to one second after the adjtime(2) call. 3. The runtime clock does not jump across a suspend: no skew is deducted from th_adjtimedelta for any time we are offline and unable to adjust the clock. otto@ says the use of the runtime clock should not be a problem for ntpd(8) or the NTP algorithm in general.
604cf95e 2020-07-16 21:49:41 Pass the interrupt handler cookie instead of the pointer to it to intr_barrier(9). Fixes mysterious panics seen while working on intr_barrier(9) for arm64. ok jmatthew@
122a6b72 2020-07-16 21:26:18 Rewrite loop to match what is written down in the ABI document. ok drahn@
0b29cb40 2020-07-16 21:18:29 Access adapter softc via link->bus->sb_adapter_softc. In sparc64 autoconf access 'luns' via sb_luns and 'adapter_buswidth' via sb_adapter_buswidth. Removes last post-config uses of the copies of bus related information in scsi_link.
af856e3a 2020-07-16 21:18:09 Make lazy binding work. Committing on behalf of drahn@ who is a bit busy.
a37af58c 2020-07-16 20:08:12 Remove obsolete LOCALE_HOME code we have never used (and never will). Upstream removed it in 2004. From Jan Stary.
a79842c9 2020-07-16 19:48:58 First stab at a bootloader for OpenBSD/powerpc64. Based on the same principle (and mostly copied from) the bootloader written by visa@ for OpenBSD/octeon. Needed because the petitboot environment provided by the OpenPower firmware is unsuitable for loading OpenBSD kernels properly.
b82a4de3 2020-07-16 19:44:19 regen
cd75e4e9 2020-07-16 19:42:47 Bootloader magic.
c93d5785 2020-07-16 19:42:18 Add disk description for bootloader ramdisk.
d7917304 2020-07-16 19:41:03 Add BOOT kernel config.
210f3d83 2020-07-16 19:37:58 Add a pseudo-driver to "kexec" an OpenBSD/powerpc64 kernel. Heavily based on the octboot driver that we use for octeon. To be used in the bootloader kernel.
8c64a04e 2020-07-16 19:10:33 Reset firmware state upon reboot.
0833c9ba 2020-07-16 17:47:41 add -T option to make time related system calls more prominent. ok deraadt
22966de3 2020-07-16 17:47:09 allow setenv LIBC_NOUSERTC to disable userland timekeeping, for ktrace. ok deraadt pirofti
4ca7f2b6 2020-07-16 17:38:24 Remove unused assignment.
c45df278 2020-07-16 17:16:17 Make sure to update policy dependant SA fields after policy_lookup(). ok kn@ patrick@
67c3123b 2020-07-16 14:44:55 Access scsibus_softc info (luns, adapter, adapter_target, adapter_softc, adapter_buswidth) via link->bus rather than using copies currently residing in the link.
79bae57a 2020-07-16 13:41:36 sync
9a5dcdbb 2020-07-16 13:03:39 Store struct cpu_info * in arm64's interrupt wrap. intr_barrier() can already assume every cookie is wrapped and simply retrieve the pointer from it. It's a bit of a layer violation though, since only the intc should actually store that kind of information. This is good enough for now, but I'm already cooking up a diff to resolve this. ok dlg@
72d45bb7 2020-07-16 12:57:30 To be able to have intr_barrier() on arm64, we need to be able to somehow gain access to the struct cpu_info * used to establish the interrupt. One possibility is to store the pointer in the cookie returned by the establish methods. A better way would be to ask the interrupt controller directly to do barrier. This means that all external facing interrupt establish functions need to wrap the cookie in a common way. We already do this for FDT-based interrupts. Also most PCI controllers already return the cookie from the FDT API, which is already wrapped. So arm64's acpi_intr_establish() and acpipci(4) now need to explicitly wrap it, since they call ic->ic_establish directly, which does not wrap. ok dlg@
41e86d54 2020-07-16 12:38:43 Beef up struct scsibus_softc to hold the information needed to initialize the scsi_link's on the bus. After sucking this information out of the "prototype" link provided by the scsibus_attach_arg, no need to keep a pointer to that prototype.
2d8fcdc3 2020-07-16 10:17:09 drm/i915: Also drop vm.ref along error paths for vma construction From Chris Wilson 5e53344673fcf1df8ff52675ab0539fff26a8e29 in linux 5.7.y/5.7.9 cf1976b11372cac3b57fbae1831f66a4486355d3 in mainline linux
ee7f71c2 2020-07-16 10:14:13 drm/i915: Drop vm.ref for duplicate vma on construction From Chris Wilson 98762e5b00567622d57295d2d3389aea2c37be03 in linux 5.7.y/5.7.9 42723673a193d5f8e30dba6ea9826d42262a502b in mainline linux
28304a26 2020-07-16 10:11:33 drm/amdgpu: asd function needs to be unloaded in suspend phase From Huang Rui 22ff658396b44606163ad0231e8215309a26d613 in linux 5.7.y/5.7.9 20303ec5d2165ee6344190274bc59118921f71d9 in mainline linux
6bd9a77d 2020-07-16 10:09:22 drm/amdgpu: add TMR destory function for psp From Huang Rui 2c41c968c6f6480860c67210815cadc6507f5014 in linux 5.7.y/5.7.9 c564b8601ae917086751d90f464d5f19d731ece7 in mainline linux
60ed5e11 2020-07-16 10:07:02 drm/amdgpu: don't do soft recovery if gpu_recovery=0 From Marek Olsak d7915047a1d59474d06789a9dd1925064969e080 in linux 5.7.y/5.7.9 f4892c327a8e5df7ce16cab40897daf90baf6bec in mainline linux
ec9a754d 2020-07-16 10:03:44 drm/i915: Skip stale object handle for debugfs per-file-stats From Chris Wilson d073ed965cd908d320d49824dee02c80168f96a8 in linux 5.7.y/5.7.9 7dfbf8a07cf8c936b0d6cc810df6ae7923954d5b in mainline linux
15914761 2020-07-16 10:01:41 drm/i915/gt: Pin the rings before marking active From Chris Wilson 096b85c64987a0ef4fcc6ac0e3c3661573828df1 in linux 5.7.y/5.7.9 5a383d443b29a140094430f3ad1d02fa1acc2b80 in mainline linux
82efeb8e 2020-07-16 09:59:17 drm/radeon: fix double free From Tom Rix 67e9648f20524ff6824ebeb26afea45f7d9c300d in linux 5.7.y/5.7.9 41855a898650803e24b284173354cc3e44d07725 in mainline linux
df64a991 2020-07-16 09:56:50 drm: panel-orientation-quirks: Use generic orientation-data for Acer S1003 From Hans de Goede 109b3b4e2a0f5bfda023a1b91b404fac31ba6808 in linux 5.7.y/5.7.9 a05caf9e62a85d12da27e814ac13195f4683f21c in mainline linux
86b21ffc 2020-07-16 09:53:49 drm: panel-orientation-quirks: Add quirk for Asus T101HA panel From Hans de Goede e64e92fea2bf85d9f33304faf973c46859afd0f7 in linux 5.7.y/5.7.9 6c22bc18a3b93a38018844636557ad02e588e055 in mainline linux
ff2b09e8 2020-07-16 09:50:39 drm/ttm: Fix dma_fence refcnt leak when adding move fence From Xiyu Yang bfd4297fd74ebb18d05044e49f1ff2fedd2ece8d in linux 5.7.y/5.7.9 11425c4519e2c974a100fc984867046d905b9380 in mainline linux
9eae3c38 2020-07-16 09:48:22 drm/ttm: Fix dma_fence refcnt leak in ttm_bo_vm_fault_reserved From Xiyu Yang f5e6ec57e3cbe37cd3ef52d18de6be9953ee105a in linux 5.7.y/5.7.9 37cc4b95d13f311c04aa8e9daacca3905ad45ca7 in mainline linux
eaab1492 2020-07-16 09:47:16 Since the page tables could be larger than 256MB allow for multiple segments to map them.
aff45b01 2020-07-16 05:45:03 Remove the refill timeout and wait for interrupts to finish when bringing the interface down. prompted by a crash seen by Hrvoje Popovski ok dlg@
8014a50b 2020-07-16 03:04:50 use a mutex to serialise the test and set of ifp->if_link_state. this was serialised by NET_LOCK, but now i get link state change information in an interrupt context, so i shouldn't (can't) do that anymore. ok jmatthew@
f1bd1ab1 2020-07-16 01:50:25 Fix perl bugs that had me printing the wrong cert number for errors
4e804522 2020-07-16 00:58:02 sc_atq_mtx is unused, so get rid of it
b296e835 2020-07-16 00:52:33 Initialize sis_ring_init() 'sis_rx_prod' and 'sis_rx_cons' to 0. ok mpi@, deraadt@
c4e156dd 2020-07-15 22:58:33 Userland timecounter implementation for arm64. ok naddy@
a03326bb 2020-07-15 22:49:07 ieee80211: track micfail timeout with getuptime(9) instead of ticks With input from stsp@. ok stsp@
e44adad9 2020-07-15 22:46:51 powerpc64 has the sysctl's for power control, so it can use the apmd/apm combo for -L/-H and such. (it gets all the rest of the mess too) ok kettenis
631c607e 2020-07-15 21:20:08 settimeofday(2): securelevel 2: prevent root from freezing the UTC clock At securelevel 2 we prevent root from rewinding the kernel UTC clock. The rationale given in the comment is that this prevents a compromised root from setting arbitrary timestamps on files. I can't really speak to the efficacy of this mitigation, or to the efficacy of the securelevel concept in general, but the implementation of this mitigation is wrong. We need to check: timespeccmp(ts, &now, <=) instead of timespeccmp(ts, &now, <) like we do now. Time is a continuous value that is always advancing. We must prevent root from setting the kernel UTC clock to its current value in addition to prior values. Setting the UTC clock to its current value amounts to rewinding it even if we cannot actually measure the difference with a timespec. With this change, at securelevel 2, root can no longer completely freeze the UTC clock.
1a802015 2020-07-15 14:47:41 Remove unused variables
adb74705 2020-07-15 14:45:15 Make CERT and CERTREQ payloads optional for public key authentication. When using certificate authentication the CERT payload is mandatory and as the name suggests is used to send a certificate containing a public key used for the authentication signature. For pubkey authentication the key is preshared and stored locally, but only the 'ca' process can read the local keys. The 'ikev2' process had to get the key from the received CERT payload to verify the authentication signature. The peer ID + raw key was then forwarded to the 'ca' process which compared the key against the contents of /etc/iked/pubkey and returned either CERTVALID or CERTINVALID. With this change a message containing only the ID may be sent from 'ikev2' to the 'ca' process if CERT was not included. In this case the CA process will try to find a local key matching the ID and return it to the 'ikev2' process. The auth verification happens after the 'ca' process has verified or found a key and returned it to the 'ikev2' process, eliminating the need for the CERT payload. Making CERTREQ optional is easier because we already have a fallback case if the CERTREQ can not be fulfilled. If no CERTREQ was received we now use this same fallback. This should fix public key authentication interoperability with *swan and other IKEv2 implementations. ok and tested by kn@ ok patrick@
63dbfcd1 2020-07-15 13:02:44 Fix races in pppacopen() caused by malloc(9). ok mpi@
99ec89c2 2020-07-15 12:36:01 Fix agintc(4) for non-MULTIPROCESSOR kernels. Due to the recent changes the driver expected that it can find all CPUs referenced by the interrupt controller. Since on non-MP we only spin one core up, the driver won't ever be able to find them. Relax the requirement for non-MP, since the info extracted there is only needed for MP. ok kettenis@
38f1be56 2020-07-15 11:56:29 Add sizes to free(9) calls All of these buffers are cleared with explicit sizes before free(), so reuse the given sizes. tested and OK tobhe
24c7ba2a 2020-07-15 11:33:12 Run the sxitemp(4) at IPL_SOFTCLOCK instead of IPL_VM. Prevents "panic: mtx ...: locking against myself" on Orange Pi Zero. Analysis by patrick@: "The thermal sensor framework uses its own taskq with IPL_SOFTCLOCK. sxitemp(4) calls thermal_sensor_update() from interrupt context, and sxitemp(4) is using IPL_VM (memory allocation?!) for its interrupt. IPL_VM is obviously higher than IPL_SOFTCLOCK, so it ends up being able to interrupt the taskq. Even though we're in msleep_nsec, I think we have *not yet* given up the mutex, that we are holding while looking for more work, only releasing it while sleeping. Thus, the interrupt runs task_add(), which tries to grab the taskq's mutex, even though the taskq already holds it!" ok patrick@ kettenis@
e8b59d3c 2020-07-15 11:03:17 Renumber after killing windows for choose-tree.
f8fbf366 2020-07-15 10:19:42 Add a forward declaration of struct cpu_info. Fixes build of RAMDISK kernels.
5cafaabf 2020-07-15 10:09:54 Handle padding cells correctly when searching, GitHub issue 2301.
34a5437d 2020-07-15 08:34:25 Optimize character rendering in 32bpp mode, with unrolled rows and pairwise foreground / background pixel rendering. This does double-pixel rendering for the common font widths (8, 12, 16, and 32 pixels wide), resulting in a significant speed-up. No regression noticed on 32-bit architectures. Tested by weerd@, and by abieber@ on macppc. From John Carmack, thanks!
37390617 2020-07-15 08:24:29 Use CPU_IS_PRIMARY macro on alpha and mips64. OK deraadt@, visa@
ff0c9233 2020-07-15 07:50:46 - Add [-a rounds] in ssh-keygen man page and usage() - Reorder parameters list in the first usage() case - Sentence rewording ok dtucker@ jmc@ noticed usage() missed -a flag too
78b494b9 2020-07-15 07:27:07 tmpfs_reclaim() has to make sure the VFS cache has no more locks held for the vnode. ok beck@
70436566 2020-07-15 07:15:00 Use SENSOR_ENERGY as the type of energy sensors.
e8afce5b 2020-07-15 07:13:56 POWE9 CPUs provide an energy sensor that accumulates the emount of energy used by the processor chip. Although we have a SENSOR_WATTHOUR sensor type its units are not really suitable for this sensor. So add a SENSOR_ENERGY type that uses micro Joules as its unit. ok deraadt@
b047647f 2020-07-15 06:43:16 Fix previous by calling the correct function.
1751a375 2020-07-15 05:40:05 start sentence with capital letter;
bea1c701 2020-07-15 05:36:50 Update test to match recent change in match.c
3190faf3 2020-07-15 04:55:47 Use $OBJ to find key files. Fixes test when run on an obj directory (on OpenBSD) or out of tree (in Portable).
ca19ff74 2020-07-15 04:36:02 patrick@ pointed out there was a gap in the flow group numbering. ok dlg@
3a1e91d3 2020-07-15 04:27:34 Add default for number of rounds (-a). ok djm@
aebafcd6 2020-07-15 03:49:59 The exit code from the perl matters here
747f195e 2020-07-15 03:44:42 Don't leak the X509_STORE
11623c6a 2020-07-15 03:32:51 Consistently convert syndrome codes from big endian before printing them. ok dlg@
3d006088 2020-07-15 03:12:42 Add certificate validation tests generated using the tools from bettertls.com, and a verification suite to try each certificate in the same manner as the web based tests do using X509_verify. This includes the list of "known" failures today in our validaion code so we can move forward without moving back.
e65f1ede 2020-07-15 02:29:26 Scott Cheloha convinces me the newly added tsleep_nsec should be tsleep, to hint we are doing the minimum scheduler sleep (and as side effect, collecting potential signal status)
0ae95be1 2020-07-14 23:57:01 allow some additional control over the use of ssh-askpass via $SSH_ASKPASS_REQUIRE, including force-enable/disable. bz#69 ok markus@
6ae00b2d 2020-07-14 21:11:54 Properly clean up and dereference 'old' policy after failed lookup. ok patrick@
b536459a 2020-07-14 20:52:44 Print real/avail mem like we do on all other architectures.
8c3334e9 2020-07-14 20:40:48 Make INTx interupts work.
68715bef 2020-07-14 20:39:40 Add xics(4), a driver for the OPAL virtual ICS.
c5e78cb5 2020-07-14 20:37:18 Add FDT interrupt support.
af806480 2020-07-14 19:08:30 Convert option handling for openssl(1) verify. ok inoguchi@, tb@
30342cdf 2020-07-14 18:55:59 Dedup the use legacy stack code. ok inoguchi@ tb@
a759cde3 2020-07-14 18:47:50 Revert the TLSv1.3 version switching fix/hack. This is no longer necessary since the TLS_method() now supports TLSv1.3. Reverts r1.211 of ssl_lib.c. ok beck@ inoguchi@ tb@
2520d021 2020-07-14 18:33:34 Enter the certs regress directory.
fbd64e3c 2020-07-14 18:33:00 Add regress for X509_verify() using the new bundles. A number of these tests are known to fail due to bugs/incorrect verification implementation.
4cfece93 2020-07-14 18:29:16 Provide generated certificate bundles and roots for regress. ok beck@ tb@
7db2fa27 2020-07-14 18:27:28 Provide tools to build certificate changes for verify regress. This provides a script that generates a variety of certificate chains and assembles them into bundles containing various permutations, which can be used to test our X.509 verification. A Go program is included to verify each of these bundles. ok beck@ tb@
056d7610 2020-07-14 18:25:22 Use a rwlock to protect the ttylist, rather than having ttymalloc/ttyfree callers use spltty. ok kettenis
5bc6646e 2020-07-14 18:13:22 Force TLSv1.2 when testing SSLv3/TLSv1.2 cipher suites. Otherwise we end up switching to TLSv1.3 and using a TLSv1.3 cipher suite.
17e2d200 2020-07-14 18:11:16 Add a -tls1_2 option so we can force TLSv1.2 for testing.
0e7f811a 2020-07-14 17:03:13 Mark unmanaged kernel mappings as wired and skip them if we need to evict a mapping from the page tables.
e6e88c3f 2020-07-14 16:54:46 Put some debug code behin #ifdef TRAP_DEBUG.
874055c7 2020-07-14 16:48:13 Fix TIB/TCB on powerpc64. Some bright sould decided that the TCB should be 8 bytes in the 64-bit ABI just like in the 32-bit ABI. But that means there is no "spare" word in the TCB that we can use to store a pointer to our struct pthread. So we have to treat powerpc64 special. Also recognize that the thread pointer points 0x7000 bytes after the TCB. Since the TCB is 8 bytes this means that TCB_OFFSET should be 0x7008. Pointed out by guenther@; ok deraadt@
c39afc64 2020-07-14 16:40:04 getopt(3) returns an int so don't use a char to store its return value. Makes the test work on architectures where char is unsigned. ok deraadt@, millert@
7c59a772 2020-07-14 16:01:08 Add support for routing interrupts to other CPUs in agintc(4). Most of the supporting code was already there. The driver supports establishing multiple handlers on the same pin. Make sure that a single pin can only be established on a specific core by recording the struct cpu_info * of the first establish, and returning NULL if someone tries to share the pin with a different core. For LPIs, typically used for MSIs, the routing is done by targetting an LPI to a specific "collection". We create a collection per core, indexing it by cpu_number(). For this we need to know a CPU's "processor number", unless GITS_TYPER_PTA is set. Since we now attach CPUs early, and the redistributors are not banked, we can retrieve that information early on. It's important to move this as far up as possible, as it's not as easy as on ampintc(4) to re-route LPIs. To establish an LPI on a different core, we now only have the pass the CPU's number as part of the map command which is sent to the hardware. Prompted by dlg@ ok kettenis@
de70244e 2020-07-14 15:52:20 Add support for routing interrupts to other CPUs in ampintc(4). Most of the supporting code was already there. The driver supports establishing multiple handlers on the same pin. Make sure that a single pin can only be established on a specific core by recording the struct cpu_info * of the first establish, and returning NULL if someone tries to share the pin with a different core. Since the array of CPU masks, used for enabling/disabling interrupt routing to specific cores, is only populated during cpu_boot_secondary_processors(), each core will re-route the interrupts once a core read its mask. Until then, the core will not receive interrupts for that pin. While there, remove a call to ampintc_setipl(), which seems to be a no-op. It tries to set the same value that's already set. Since the function that calls it is supposed to calculate a pin's mask and do the routing, this doesn't seem to be the correct place for such a call. agintc(4) doesn't have it either. Prompted by dlg@ ok kettenis@
d67371fd 2020-07-14 15:42:19 Implement pci_intr_establish_cpu() on arm64 and armv7. The function pointer in the chipset tag for establishing interrupts now takes a struct cpu_info *. The normal pci_intr_establish() macro passes NULL as ci, which indicates that the primary CPU is to be used. The PCI controller drivers can then simply pass the ci on to our arm64/armv7 interrupt establish "framework". Prompted by dlg@ ok kettenis@
789e88a4 2020-07-14 15:34:14 Extend the interrupt API on arm64 and armv7 to be able to pass around a struct cpu_info *. From a driver point of view the fdt_intr_establish_* API now also exist same functions with a *_cpu suffix. Internally the "old" functions now call their *_cpu counterparts, passing NULL as ci. NULL will be interpreted as primary CPU in the interrupt controller code. The internal framework for interrupt controllers has been changed so that the establish methods provided by an interrupt controller function always takes a struct cpu_info *. Some drivers, like imxgpio(4) and rkgpio(4), only have a single interrupt line for multiple pins. On those we simply disallow trying to establish an interrupt on a non-primary CPU, returning NULL. Since we do not have MP yet on armv7, all armv7 interrupt controllers do return NULL if an attempt is made to establish an interrupt on a different CPU. That said, so far there's no way this can happen. If we ever gain MP support, this is a reminder that the interrupt controller drivers have to be adjusted. Prompted by dlg@ ok kettenis@
8bdc3b62 2020-07-14 14:33:03 A pty write containing VDISCARD, VREPRINT, or various retyping cases of VERASE would perform (sometimes irrelevant) compute in the kernel which can be heavy (especially with our insufficient tty subsystem locking). Use tsleep_nsec for 1 tick in such circumstances to yield cpu, and also bring interruptability to ptcwrite() https://syzkaller.appspot.com/bug?extid=462539bc18fef8fc26cc ok kettenis millert, discussions with greg and anton
24a3fa5d 2020-07-14 11:22:11 reduce the diff to linux in local versions of functions brings in changes from 'drm/ttm: stop always moving BOs on the LRU on page fault' 5d50fcbda7b0acd301bb1fc3d828df0aa29237b8 and some other minor changes ok kettenis@
b38ea368 2020-07-14 09:52:46 Remove hyphen
53fa2216 2020-07-14 09:49:42 Add single space between pem and ...
f354b939 2020-07-14 09:46:17 Add manual for openssl(1) certhash ok jmc@
6a0dd81c 2020-07-14 09:42:33 Remove commented out debug printfs.