The Linux codebase has over 3k TODO comments, many from over a decade ago
Out of curiosity, I grabbed a copy of the repository and did some basic searching.    $ egrep -icr "\bTODO\b" * | tr ':' '\t' > ../todos
    $ cat ../todos | awk '{sum+=$2;} END{print sum}'
    6372
    $ grep "^Docum" ../todos |  | awk '{sum+=$2;} END{print sum}'
    1172                                        


So roughly 18% are in Documentation.  The biggest culprit is https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin... , because user-ret-profiler appears to only support x86.  All other architectures are in as TODOs    $ cat ../todos | sort -n -k 2 | tail
    Documentation/features/debug/user-ret-profiler/arch-support.txt 24
    drivers/media/dvb-core/dvb_ringbuffer.c 26
    drivers/platform/chrome/cros_ec_spi.c   33
    drivers/media/dvb-frontends/drx39xyj/drxj.c     34
    drivers/media/pci/ttpci/av7110_av.c     34
    net/ieee802154/nl802154.c       35
    drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c     40
    drivers/android/binder.c        48
    drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c       51
    drivers/net/wireless/broadcom/b43/phy_n.c       54

The biggest single-file culprit for TODOs is in the broadcom b43 drivers, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin....  From what I can clean from phy_n.c, it looks like it's because the linux kernel can't handle revision 19.  There's a lot like:     if (dev->phy.rev >= 19) {
      /* TODO */
            } ...

or    static void b43_nphy_tx_cal_radio_setup_rev19(struct b43_wldev *dev)
    {
     /* TODO */
    }