)]}'
{
  "log": [
    {
      "commit": "fe07b94029f8457c2109cf8d0a5e8f1f96b7f147",
      "tree": "f26100ff65bb34bc09cb3a31b15f8e7a7168af32",
      "parents": [
        "448235b3c19b02f2013f43116b7de89d91e99bbe"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 18:42:24 2022 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 18:42:24 2022 -0500"
      },
      "message": "tests/linux: update gitignore\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "448235b3c19b02f2013f43116b7de89d91e99bbe",
      "tree": "fae1e0e562efeafc4392ad693ea3cac6f621bdbb",
      "parents": [
        "5fdcca12ca995898f12828244225b5032cd821db"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 16:37:16 2022 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 16:46:20 2022 -0500"
      },
      "message": "vmm: update Linux commandlines\n\n- The 5.16 akaros-guest no longer needs the lapic command.\n- We don\u0027t want to bother with spectre and whatnot in the guest.\n- Tinycore doesn\u0027t need nortc anymore.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "5fdcca12ca995898f12828244225b5032cd821db",
      "tree": "df26f1a67d74a00fc4a46948d8b15557509fcefd",
      "parents": [
        "a256bda580c9f77ab3217e40fe9df910d8382c39"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 16:32:15 2022 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 16:32:15 2022 -0500"
      },
      "message": "x86: vmm: support dst_shorthand APIC IPIs\n\nThere are a couple bits in the ICR that specify things like \u0027broadcast\u0027\nand \u0027self\u0027.  Linux uses these if nr_cpus \u003e 2.\n\nNote that we have to do the check in the kernel too.  The kernel gets\nfirst dibs on resolving an vmexit.  That took a couple hours to figure\nout...\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "a256bda580c9f77ab3217e40fe9df910d8382c39",
      "tree": "0e1748bab69c398f7e26234ecc8a205f8a2b6c22",
      "parents": [
        "aabda719eac132fea38500b1b16e46282e141397"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 16:31:11 2022 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Feb 23 16:31:11 2022 -0500"
      },
      "message": "vmm: start with irq 1 for virtio-mmio\n\nPreviously we started with irq 0, and that worked with Linux 5.3.  With\n5.16, it no longer works.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "aabda719eac132fea38500b1b16e46282e141397",
      "tree": "351d5031d12bd72646befad2dda633196bb35a3c",
      "parents": [
        "9c941853b3f87fd3e16d9f9501f240c3485dd722"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon May 17 15:39:19 2021 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon May 17 15:39:19 2021 -0400"
      },
      "message": "Fix Kbuild\u0027s rebuilding issue\n\nKbuild was rebuilding the entire kernel on each make.  This might be due\nto a recent change in GNU make.  When running with make V\u003d2, the change\nwas due to a command line difference.  The difference (via hacking\nKbuild.include) was KBUILD_STR, where the \\#s was getting commented out\nfrom one of the versions of the cmd_ arguments.\n\nAnyway, the simplest thing was to remove KBUILD_STR, which Linux already\ndid.  This commit basically \"side-ports\" Linux commit b42841b7bb62\n(\"kbuild: Get rid of KBUILD_STR\"), plus adding \u0027quote\u0027.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "9c941853b3f87fd3e16d9f9501f240c3485dd722",
      "tree": "b05c5cd33459d2f8d44819702a8fd06a7db0aa00",
      "parents": [
        "d8b15e15415b5032759247c539d3d03a77fd6532"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Jan 15 13:41:58 2021 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Jan 15 13:41:58 2021 -0500"
      },
      "message": "Update get_html to work with github pages\n\nI didn\u0027t bother stripping the HTTP headers from the response.\nShip it.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "d8b15e15415b5032759247c539d3d03a77fd6532",
      "tree": "0fa283690b10bebeede2a4efe88c0ea90416a526",
      "parents": [
        "3b64a55fba83d7ce59e27d064e0dbf6fabde1fe5"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 14 16:49:34 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 14 16:49:34 2020 -0400"
      },
      "message": "tests/linux: use Akaros\u0027s CFLAGS\n\nParticularly annoying was the lack of -Wno-format.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "3b64a55fba83d7ce59e27d064e0dbf6fabde1fe5",
      "tree": "bc1b6516fc2d5e4b20ff694b20c99eb5f9cf1275",
      "parents": [
        "4ea9a5c4a2ff22223dc0eae66eca3b41966ccece"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Jun 25 14:18:43 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Jun 25 14:18:43 2020 -0400"
      },
      "message": "Overhaul lock_test.R\n\nMore functionality and works from the command line.  See you in another\n5-6 years.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "4ea9a5c4a2ff22223dc0eae66eca3b41966ccece",
      "tree": "46603774141ec0eeec86a98d535b58e0270ebfc1",
      "parents": [
        "4b593bc3a30e8b7241057ec853d6266bd3fc0e7f"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Jun 25 14:01:50 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Jun 25 14:01:50 2020 -0400"
      },
      "message": "tests/linux: support multiple kernel lock tests\n\nJust like userspace, we can now specify multiple tests to run in the\nkernel.  It\u0027s basically the same as in userspace.\n\nThere are a few other fixups.  Notably:\n- disable IRQs for multiple loops.  For whatever reason, disable/enable\nIRQs (even outside the timestmping and critical section) hurts\nperformance (throughput and latency).  Just do it every so often.  Still\nnot 100% on this.\n\n- hold_time is copied into the stack, instead of being global.  We could\nalso make it read_mostly - not sure if that would help.  The issue is\nthat it\u0027s often adjacent to other cache lines in the module.  Such as\nthe cache line holding the lock.  The adjacent cacheline prefetcher\n*might* pull in that cacheline in exclusive mode.  That would cause all\nthreads to take a cache miss when reading hold_time.  You\u0027d think that\ngrabbing the lock would always pull in hold_time for the lock holder,\nbut not necessarily.  It\u0027s an MCS lock, so you might have touched the\nmcs_l a long time ago.  One reason why we wouldn\u0027t miss on hold_time\nwould be if we did READ_ONCE(lock_test) *before grabbing the lock*,\nwhich would also pull in the cacheline.  That would only matter if the\nAClP didn\u0027t always invalidate the line (which is true).  It\u0027s a mess.\nNot 100% on this either.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "4b593bc3a30e8b7241057ec853d6266bd3fc0e7f",
      "tree": "f8d48ca32622d1f98277cf624f557f4ba2050542",
      "parents": [
        "80eabffc10a755f8e1817b639297d255e0246f5d"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Jun 25 13:58:28 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Jun 25 13:58:28 2020 -0400"
      },
      "message": "tests/linux: make user code more like kernel code\n\nCompile the module and user programs with similar CFLAGS, use \"pause\"\nfor cpu_relax(), and have a halfway decent ndelay.  (Note linux\u0027s\ndefault ndelay is udelay(), but at least it\u0027s a busyloop and not a\nsleep).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "80eabffc10a755f8e1817b639297d255e0246f5d",
      "tree": "b16734cd0bd3ab2ea7996223a51359d85f043352",
      "parents": [
        "d16256e626ec0064ce95bfb4b817de099db942c4"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 12:59:11 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 13:10:41 2020 -0400"
      },
      "message": "tests/lock_test: add a linux kernel module for MCS locks\n\nThis uses the in-kernel \"queue\" locks, which are basically special MCS\nlocks.  The test runs in the kernel, and we extract the information to\nuserspace for processing, using the same commands and analysis as for\nuser-space spinlocks.\n\nRight now, there\u0027s only the one kernel lock.  We could add more, like\nregular spinlocks and whatnot.  That way, you\u0027d be able to test a\nvariety of spinlocks, with the low-interference you\u0027d expect from\nrunning inside the kernel (irqs disabled, no resched while holding\nlocks, etc).\n\nOne reason to add other locks would be to test *our own* locks, instead\nof Linux\u0027s locks.  In that sense, the module would be a platform for\nbenchmarking lock performance, generally.  Versus just testing Linux\nimplementations.   Especially since, from early numbers, our Linux\nuserspace MCS locks (which are basically the ones we coded for Akaros)\nare better than the in-kernel MCS locks (queue_lock()).\n\nTo build this, you\u0027ll need to set up your LINUX_KDIR variable, but also\nhack the source to export a symbol.  Oh well.  You\u0027ll also need to be\nrunning that kernel.  You should be able to hack this up for a running\nmachine.  (e.g. cat the symtab, find the function, cast that arbitrary\nnumber to a function pointer, and cross your fingers).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "d16256e626ec0064ce95bfb4b817de099db942c4",
      "tree": "b980798b6990e504ed0e3accc6a95babae47bcbd",
      "parents": [
        "17a2227d05b319a0c43580031ed03bad1096e82f"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 12:04:59 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 13:10:41 2020 -0400"
      },
      "message": "tests/lock_test: fix affinity race\n\nWe were setting the affinity after starting the threads.  The test\nstarts when all threads hit the barrier.  If the threads hit the barrier\nbefore we set their affinity, we\u0027d interfere with the test.\n\nThe fix is to just have each thread set its own affinity before hitting\nthe barrier.\n\nNote that Akaros doesn\u0027t actually use this.  Our os_prep_work made sure\nwe had enough vcores, so we\u0027re relying on 2LS-specific details: namely,\nthat threads will get picked up by idle vcores.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "17a2227d05b319a0c43580031ed03bad1096e82f",
      "tree": "2760013e823cc53de0d0c4c154fe3559bf0d7199",
      "parents": [
        "4956981fad12e87ddc1e4492882cb090e8d21536"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 11:32:08 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 13:10:41 2020 -0400"
      },
      "message": "tests/lock_test: overhaul lock_test\n\nIn preparation for handling another lock type, this commit cleans up a\nbunch of things.  Better lock types, better output options, easier to\nfollow code, etc.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "4956981fad12e87ddc1e4492882cb090e8d21536",
      "tree": "f453fe441a94449977cb695384168be36cce094e",
      "parents": [
        "ee72c976c488e98cc6b1a58989f90861f87ec377"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Jun 08 21:47:22 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 13:10:40 2020 -0400"
      },
      "message": "tests/linux: add max_vcores()\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "ee72c976c488e98cc6b1a58989f90861f87ec377",
      "tree": "0fc7616d10983db4832c6e1fd7a9c94b9fcd4f7a",
      "parents": [
        "58faa3c2d65452a1a7c7cb407a4f27d8f89f87fb"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Jun 08 19:15:03 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 13:10:39 2020 -0400"
      },
      "message": "tests: support building Linux tests in-tree\n\nPreviously, you had to manually invoke gcc to build the tests.  Now,\nanytime you make tests, you\u0027ll also get the Linux version.  The tests\nthat are built for both OSes are specified manually in the Makefile.\n\nThis will also build any Linux modules in tests/linux/modules/.  You\u0027ll\nneed to provide LINUX_KDIR, e.g. in your Makelocal.  This is for tests\nthat need kernel support, such as the upcoming lock_test mcs-kernel mode.\n\nYou can also build these programs directly by cd-ing into tests/linux\nand running Make.  This won\u0027t use any of the top-level Makefile\nfeatures (including Makelocal settings).  It\u0027s convenient if you don\u0027t\nwant to build Akaros (toolchain recompile, etc.).\n\nEither way, the test binaries will appear in tests/linux/obj/.  The\ntop-level obj/ is just for Akaros\u0027s build output.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "58faa3c2d65452a1a7c7cb407a4f27d8f89f87fb",
      "tree": "722d9fae5267667fdbe5f37f4e9b94e424faf38b",
      "parents": [
        "457a7dd40f97812348701b4cefb5566da154ecc7"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Jun 08 19:17:58 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Jun 09 13:10:18 2020 -0400"
      },
      "message": "parlib/linux: cache the value of the TSC frequency\n\nInstead of computing it every time.  Note: we probably should get this\nfrom an MSR, if possible.  Computing takes about a second, and is\nusually close enough.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "457a7dd40f97812348701b4cefb5566da154ecc7",
      "tree": "be4bf64c756b70fe0436e0b7136c63f85a50a954",
      "parents": [
        "5e0dca9112aff4978e8a3a882ed735fa60101704"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu May 21 11:01:04 2020 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu May 21 11:01:04 2020 -0400"
      },
      "message": "benchutil: touch up measure.[ch]\n\nFound these while using them on Linux.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "5e0dca9112aff4978e8a3a882ed735fa60101704",
      "tree": "b57f6dc36bca044cbb1ef0329c83b392cd0a370a",
      "parents": [
        "fa8c0e1c708125085b032dd200339412b0612135"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Mar 06 17:23:06 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "iommu: use parse_cmd() for attach/detach\n\nI don\u0027t like using sscanf on user-space strings.  That, and parsecmd()\nis the approved way to handle command strings.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "fa8c0e1c708125085b032dd200339412b0612135",
      "tree": "11327a852c0ee8d001cb4bfe19dc0d2a12e07664",
      "parents": [
        "1bdff417bf370e0b4401b72426bbbbc94a9c7fe5"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Mar 06 16:53:34 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "iommu: overhaul initialization code\n\nAll of the setup code was hard to follow, to include initialization,\nenabling translation, etc.  It was also unclear about what was\nnecessary, such as when we needed to do write-buffer flushing or\nread/write draining.\n\nYeah, this is a bit of mult-commit.  Undoing damage...\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "1bdff417bf370e0b4401b72426bbbbc94a9c7fe5",
      "tree": "913787d9ba3016da1f9b84da89b7e2091fc867a2",
      "parents": [
        "0f2514a5c9a0b82e51ac8e5f7da7a4a43152441b"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 17:18:31 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "Add retry_until()\n\nThis is a helper macro for a common pattern: poll on some command or\nstatus check, but don\u0027t wait forever.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "0f2514a5c9a0b82e51ac8e5f7da7a4a43152441b",
      "tree": "52558f791fdf76ad02c256c680548f9ffa3d1991",
      "parents": [
        "0bd1932fddd1e80503b0c45211749a229545df84"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:10:24 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "cbdma: overhauled #cbdma\n\nThis uses the dma engine API, and the Linux IOAT driver beneath that.\n\nFor whatever reason, we auto-assign 0:4.3 to the kernel, and that is the\nonly device used by #cbdma/ktest.\n\n\tcat cbdma/ktest \t\t# tests 0:4.3 in the kernel\n\techo 00:04.3 0 \u003e iommu/detach \t# detaches from the kernel\n        echo 00:04.4 PID \u003e iommu/detach # attaches to PID\n        ucbdma 0:4.3 \t\t\t# attach, test, detach\n        ucbdma 0:4.4\n\nucbdma spits out all of the iommu mappings when it runs.  It\u0027s basically\nthe ktest \"do a single memcpy and don\u0027t break anything\" type of test.\ni.e. it doesn\u0027t test stuff like \"can i do a ucbdma without assigning\" or\nwhatnot.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "0bd1932fddd1e80503b0c45211749a229545df84",
      "tree": "eadd342df18d6bd61173cef5d32c577edd5ffbad",
      "parents": [
        "31c1981616c2f93a1db97a13eb409fa8e9837970"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 14:58:18 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "parlib: add a helper to run a process and wait\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "31c1981616c2f93a1db97a13eb409fa8e9837970",
      "tree": "ff13307f6694055b586908edbea64bb750c06f6f",
      "parents": [
        "03668bef2e7fe7de8c7912ee9527e1db1573c4ac"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 14:36:41 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "parlib: add a helper for \"notify debugging\"\n\nNotification events carry payloads, unlike signals which are just a\nbit per interrupt.  During debugging, I\u0027ll often hook up a handler to\nthe debug event EV_FREE_APPLE_PIE (9), and poke it from the shell with:\n\n\t$ notify PID 9 arg1 arg2\n\nThis commit adds a helper for hooking an event handler to event 9.  Note\nyou need a ev_mbox type that can handle a payload (e.g. a UCQ, but not a\nbitmap) if you want to receive the actual arguments.\n\nYou can, of course, hook in to any event you\u0027d like.  \u00279\u0027 is typically\nfree.  You can also do similar things with signals, but once you want to\ndo more than one thing with a command (like print different debug info,\nor set different flags), you\u0027ll want the full capabilities of a\nnotification event.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "03668bef2e7fe7de8c7912ee9527e1db1573c4ac",
      "tree": "d21b623747df28763b229bfc5557c5f10ee8a654",
      "parents": [
        "b9002c0a8c8e490a5ed6757abdc2a2516fa5f61e"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Mar 02 12:26:10 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "rendez: tell callers whether or not we timedout\n\nPreviously, you couldn\u0027t tell if you timed out or not.  It might not be\nthat useful, given the inherent raciness with these operations, but I\nused this briefly in some testing code.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "b9002c0a8c8e490a5ed6757abdc2a2516fa5f61e",
      "tree": "4e6b709107a1913997fc9fabfa6cbe83b8712e90",
      "parents": [
        "a97efbc9cb46b0d5c98db211633a12c9f7f5fd71"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Feb 28 12:20:15 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "Add a simple watchdog\n\nThis watchdog will reboot the machine if core 0 is sufficiently wedged.\nTypically, this happens when Core 0 is stuck in IRQ context, such that\nyou cannot interact with the machine remotely.  Then you are unable to\ndo anything, and unless you have decent remote reset capabilities (which\nI don\u0027t), you can\u0027t get the machine back.\n\nThe watchdog uses the HPET timer and an NMI, ensuring responsiveness\nwhen IRQs are disabled.\n\nA reboot-worthy delay is defined as the watchdog ktask not running for a\nlong period: at least the time you requested.  This means if you are\nstuck in another kthread (to include a non-blocking syscall) for long\nenough, such as in a non-irqsave spinlock, or just a long computation,\nyou could trigger the watchdog.  Recall that our kthread scheduler is\nnon-preemptive.\n\nTo set a watchdog that will wait at least 120 seconds before rebooting:\n\n\techo on 120 \u003e \\#watchdog/ctl\n\nTo turn it off, if you want:\n\n\techo off \u003e \\#watchdog/ctl\n\nTo see the status (on or off):\n\n\tcat  \\#watchdog/ctl\n\nIf you try to set it for longer than the timer / driver can handle,\nwe\u0027ll adjust it down to an appropriate time and send you a warning.\n\nIf you\u0027re working on a remote machine, I recommend putting something in\nyour init.sh.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "a97efbc9cb46b0d5c98db211633a12c9f7f5fd71",
      "tree": "aa8d543c258fbb4138c111731b02ea845da6b3db",
      "parents": [
        "8a772d350c38c5ab2bdb87c1ac987baa7bc68072"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Feb 28 12:16:43 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Apr 01 18:27:54 2020 -0400"
      },
      "message": "hpet: add basic support for using timers\n\nThe HPET is a disaster.  This commit adds the basical support I needed\nfor a watchdog timer.  YMMV.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "8a772d350c38c5ab2bdb87c1ac987baa7bc68072",
      "tree": "035d0f6de0c85997aa28c1579e0792e2007abcdf",
      "parents": [
        "e8b38e0e72c337222fdab903de8eca2ff35b6369"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Feb 24 16:41:39 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "Add a #template device\n\nThis is for quickly crafting simple devices that use a devdir table and\ndevgen().\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "e8b38e0e72c337222fdab903de8eca2ff35b6369",
      "tree": "be6493112775643f8aa24df9bef7429e7baedaf3",
      "parents": [
        "7f74d27b2bdf12aaab5f9b6ad3b8eda2f2e9fe8c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Feb 28 15:58:31 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "Add an escape hatch for \"NMI-safer\" printing\n\nWhen debugging, I often want print a backtrace in NMI context.  That\u0027s\nnot particularly safe, and for the watchdog, hanging the machine is a\nbad idea.\n\nThese dirty bools will let us skip the two locks *that I know about*\nfrom the printing code paths.  Super brittle.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "7f74d27b2bdf12aaab5f9b6ad3b8eda2f2e9fe8c",
      "tree": "86ede462066ddaab25cc90cde69bd20dce37cac8",
      "parents": [
        "c6e6c6f20d853493c70a33f3be38e8ef3a373dfa"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Feb 14 14:19:31 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "ioat: support running in a process\u0027s address space\n\nWhenever a device is assigned to a process, it\u0027s DMA *allocations* come\nfrom the process\u0027s dma_arena.  These addresses are user addresses: both\ndriver and device.  So when we operate in the driver and touch those\nbits, we need to be in the user\u0027s address space.\n\nNote that dma_map_page() will not return a user-address.  We could try\nto wire that up, but it\u0027s a bit of a pull.  The issue is that fresh\nallocations are easy, but taking an existing kernel page and mapping it\ninto the user is a little tougher.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "c6e6c6f20d853493c70a33f3be38e8ef3a373dfa",
      "tree": "65f592d70dc44cee6a203e6941f70f76435236ee",
      "parents": [
        "81b6433a4a5b92910aca71963eade3da0fcb3633"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Feb 14 13:45:29 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "pci: pci_set_ops() always assigns to the kernel\n\nThe IOMMU sets an identity mapping for the kernel, by default, for all\ndevices.  In essence, this is assigned to the kernel.  If someone wants\na different state, like unassigned, then do it manually.  e.g.\n\tpci_set_ops(pdev);\n\t...\n\tpci_device_unassign(pdev, NULL);\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "81b6433a4a5b92910aca71963eade3da0fcb3633",
      "tree": "e4fc17d8883c88497d0556987ceb56e364ca4991",
      "parents": [
        "2b9c1e152e458af561d193bb97d59bab945e9174"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Feb 14 13:36:33 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "proc: iommu: flush the iotlb during shootdowns\n\nIOMMUs are like remote cores.  When we need a generic TLB shootdown, we\nalso need to shootdown the IOTLB for any IOMMUs where the process\u0027s\naddress space is loaded.\n\nIf you don\u0027t use device assignment, this is a noop.  If you do, it\u0027s\npretty expensive: 800 ns or so.\n\nPart of the reason it is worse than a regular IPI shootdown is that we\nhave to wait for a response from the IOMMU hardware.  With IPIs, we know\nthat the core was using the page table (e.g. userspace or a syscall that\nwasn\u0027t in IRQ context) immediately enters the handler and stops using\nthe page table.  In short, we stop the processor from processing and\nusing the table.  Then the actual flush happens.  With the IOMMU, we\ncan\u0027t stop the device from processing, so we have to wait until the\nflush completes.\n\nJust like IPIs, these are relatively expensive, and any tricks we want\nto do to amortize or batch up TLB shootdowns will apply equally to the\nIOTLB.  e.g. \"defer reuse / freeing of pages and PTEs\".\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "2b9c1e152e458af561d193bb97d59bab945e9174",
      "tree": "f4fe0e28fe125b08bdb52d71a1099361c1ed6a8a",
      "parents": [
        "975bf17f4a3fc5eb2256a92457e861b210b04796"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:10:37 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "iommu: rewrite device assignment\n\nThis was a mess.  The data structures and connections between processes,\npci_devices, and iommus were all a mess.  The pci device assignment\nwasn\u0027t integrated with the iommu, etc.\n\nThe main thing is that processes now have lists of their iommus, which\nwill make things less painful when we do an IOTLB flush.  It\u0027s still\npainful, but not as bad.\n\nAll of the assignment stuff was changed, so now you call the pci\nfunctions, e.g. pci_assign_device(), which will internally deal with the\niommu.\n\nWhen processes are destroyed, we tear down any assigned device.  In my\ncurrent code, all in-kernel device users hold the pdev qlock.  For\nexample, when #cbdma tries to use the IOAT driver, it qlocks the device.\nI think we\u0027d be OK if the device was unassigned out from under the\ndriver, in that the IOMMU would protect us from any wild writes, but the\nkernel driver would likely get wedged.\n\nI have a bunch of changes to #cbdma, but the easiest thing right now is\nto just not build it briefly.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "975bf17f4a3fc5eb2256a92457e861b210b04796",
      "tree": "cbcb3f3e5677f24ad29c3ba3aea862f1432addee",
      "parents": [
        "bd1066894861939eb53b90fac16b61261d1b4e1e"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Feb 14 12:55:02 2020 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "dma: add user DMA arenas\n\nThese are arenas of user virtual addresses.  The kernel can allocate\nthem.  When we run a kernel driver for a device in the user\u0027s address\nspace, these arenas will be used for DMA addresses.  i.e. addresses the\ndevice can access.\n\nI might be able to use these for UCQs or something in the future.  In\nessence, they are kernel-allocated and kernel-freed userspace memory.\n\nArguably, we could try to use arenas to do the user VA allocation, and\nthen hook in to the specific item (e.g. anon memory, file cache,\npreexisting page) in a second step.  In that sense, do_mmap() would call\nthe UVA arena allocator.\n\nFor now, just have the arena be a wrapper interface around do_mmap() is\nfine. (arena-\u003edo_mmap, versus do_mmap-\u003earena + other magic).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "bd1066894861939eb53b90fac16b61261d1b4e1e",
      "tree": "e68d215aab7ec2e85da9962a0ea900801afc2b94",
      "parents": [
        "b9a6326cd374df57bdb06c739e4402c612509929"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Dec 12 16:00:28 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "dma: use per-device dma_arenas for dedicated devices\n\nThis commit adds the plumbing for picking a dma_arena for a device,\ninstead of assuming the default physical pages arena.\n\nFuture commits will add the ability to create and set a process\u0027s\nuser_pages arena.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "b9a6326cd374df57bdb06c739e4402c612509929",
      "tree": "28f7d789fa3f940a07cfa250cfde354a0786225f",
      "parents": [
        "69a6dc1d97a590230b634da7e92fb1acbefa53f2"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Dec 12 15:48:20 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "x86: print out the Guest PA width during boot\n\nI wanted this info when debugging the IPT.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "69a6dc1d97a590230b634da7e92fb1acbefa53f2",
      "tree": "b454e77c7442eefe101bb946394259b0e6697182",
      "parents": [
        "66a9d366feaf88927f039b4e949ea85d5a92e7ec"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Dec 10 14:52:52 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "Add a benchmark for TLB flushes and shootdowns\n\nTo use, make sure you set the C-state to 0, so processors don\u0027t sleep\ndeeply:\n\n\t$ echo 0 \u003e \\#arch/c-state\n\nThen issue the various commands.  To run all 7 tests, between core 0\n(where the shell runs) and core 7:\n\n\t$ for i in `seq 1 7`; do echo tlb 7 $i \u003e \\#regress/monctl; done\n\nTo run the POKE test, you\u0027ll need to manually change the ASM handler.\n\nOne note on concurrency: this assumes that send_ipi() and\nsend_kernel_message() provide the appropriate memory barriers.\nSpecifically, that the main thread\u0027s write to __tlb_bench_x appears\nbefore the message is sent (or at least that the handler\u0027s clobber\nhappens after).  Safe to say that\u0027s a guarantee of those functions, at\nleast conceptually and in their x86 implementations.  (wrmsr and LOCK\nxchg).\n\nAlso, using both READ_ONCE() and cpu_relax() is overkill.  The newer\nLinux style would be to use READ_ONCE(), I think.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "66a9d366feaf88927f039b4e949ea85d5a92e7ec",
      "tree": "44d9832391db2005751088914aa966b453d5d4ae",
      "parents": [
        "294c0f6a6af24012abcb89a65c1abd57e4a3df6e"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Nov 20 17:40:54 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "x86: check for unmask() during deregister_irq()\n\nIRQ handlers for type \"IPI\" do not have mask or unmask methods.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "294c0f6a6af24012abcb89a65c1abd57e4a3df6e",
      "tree": "d646617e67bb10fe1445a3adc9255e50a7799066",
      "parents": [
        "c606c537b1a52a2bcdc9addcb75481b85a0e4932"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Nov 01 17:59:50 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "pci: add a helper to lookup a pci_device by string\n\nThis is for #device code that often wants to find a pci_device that\nuserspace specified by string.  The string is of the form 00:00.0.  You\ncan skip leading zeros.\n\nThis one throws on error, since the intent is that user-interface code\nwill use it.  The older match_tbdf() is used in a few internal places,\nwith a custom format for the int argument (MKBUS()).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "c606c537b1a52a2bcdc9addcb75481b85a0e4932",
      "tree": "b628e73e5424d5425379b6b47d8198cd4b640f5d",
      "parents": [
        "ebfda71f57db6563be0e153c27858bd5f9a6335c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Nov 01 17:37:50 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "proc: make switch_to(NULL) a noop\n\nPreviously, it would switch out of any address space and into the\nboot_pgdir.  However, it wouldn\u0027t permanently leave the process\u0027s\naddress space, and boot_pgdir is mapped in all address spaces.  No one\nwas using it in this manner.\n\nAlthough I can think of reasons to do this, no one was doing it, and\nit\u0027s more convenient to have NULL be a noop.  In particular, this is for\nPCI code that may or may not need to switch into a process\u0027s address\nspace.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "ebfda71f57db6563be0e153c27858bd5f9a6335c",
      "tree": "99546691f0e4669425ce5b6494dedc2411ca436a",
      "parents": [
        "e130873a4709b6e28b3533c967d961b429c32c4e"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Oct 28 15:12:58 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:30 2020 -0500"
      },
      "message": "ioat: support device reset\n\nThis isn\u0027t a full PCI reset.  It\u0027s more of a driver reset.  PCI things,\nlike BARs and MSIX tables are still maintained.  The driver undid its\nthings, back to where it was when the system booted.  (Ideally).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "e130873a4709b6e28b3533c967d961b429c32c4e",
      "tree": "be37c537795d139afdc1ea81927c17c6c5c20291",
      "parents": [
        "ecef0caf4f46613c68388ebcfc1407ea0a1b4f1b"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Oct 28 15:09:13 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:29 2020 -0500"
      },
      "message": "pci: add support for assigning and resetting devices\n\nThis support is rather limited.  The intent is to allow devices to be\nassigned to a process, to initialize the driver, use it as a process,\nand then tear down when the process exits.\n\nUltimately, the driver\u0027s lifecycle is a subset of the time it is\nassigned to a process.  Drivers that can support repeatedly\ninitializing and resetting their device publish this when they tell PCI\nabout their init/reset ops.\n\nBy having the driver only exist when the process exists, we can create\nan arena for DMA allocs from the user\u0027s address space that will exist\nfor the life of the driver.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "ecef0caf4f46613c68388ebcfc1407ea0a1b4f1b",
      "tree": "27a7f40ad9af94d0992ea9f8975e31db28995716",
      "parents": [
        "f8298341cfc215f55d86e010496c332eaf3bb37c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Oct 28 13:41:19 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:29 2020 -0500"
      },
      "message": "pci: remove irq_dev\n\nUnused.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "f8298341cfc215f55d86e010496c332eaf3bb37c",
      "tree": "d70d58ed3272cd872a79fed8de13d20e75af42fa",
      "parents": [
        "9c55747b63ec573db603d3e09c795559e8d6e0f1"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Oct 24 15:27:12 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:29 2020 -0500"
      },
      "message": "pci: fix memory allocation type\n\nEither check the value (and use MEM_ATOMIC) or use MEM_WAIT.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "9c55747b63ec573db603d3e09c795559e8d6e0f1",
      "tree": "f70b282ff2484a47662bb330cf7ccd9f0fa5e23c",
      "parents": [
        "4055470b6fa13b1e2dcae2800ee7e72f76d85919"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Oct 24 15:23:22 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:29 2020 -0500"
      },
      "message": "pci: add a helper to detect 32 bit BARs\n\nNot sure if the AHCI driver actually needed this or if it was just\ncruft.\n\nThis commit cleans up PCI a little, in that no one refers to the\nmmio_base or size fields directly.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "4055470b6fa13b1e2dcae2800ee7e72f76d85919",
      "tree": "a4ebd66301bb2dd95ba07214d62b6684555e92e7",
      "parents": [
        "76e8476bfe8097698d788f01f52ccbe4725eea70"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Oct 24 14:37:40 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Mar 03 15:13:28 2020 -0500"
      },
      "message": "pci: map all memory BARs into the kernel\n\nAll device memory BARs get mapped, and drivers can just ask for a\nspecific, preexisting mapping.  They will stay mapped for the life of\nthe system.\n\nThis makes it easier to reset and initialize a device after the kernel\nboots.  We don\u0027t need to map and unmap the KVA at runtime, which would\nhave changed the kernel mapping, requiring changes to all existing\naddress spaces / pgdirs.\n\nIt\u0027s also just easier for the devices - just ask for the BAR number, and\nwe\u0027ll provide the address.\n\nNote the 82563 wasn\u0027t using \u0027nocache\u0027 for its register space.  Probably\na bad idea.\n\nAlso, I\u0027m still up-in-the-air with respects to uinptr_t vs void*.  Plan\n9 and Linux drivers tend to use void* for their iomem, even though you\naren\u0027t supposed to dereference it with normal operations.  In Linux, you\nuse writel(void*) (write32() here).  Our older code uses e.g.\nwrite_mmreg32(uintptr_t).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "76e8476bfe8097698d788f01f52ccbe4725eea70",
      "tree": "ff2fa88d792245b2741f583faed95a29a3072ae8",
      "parents": [
        "f3c9ddf34aa40d4d39f38fe8a0c336ac8a0c457c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Sun Nov 17 13:13:00 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Sun Nov 17 13:13:00 2019 -0500"
      },
      "message": "kconfig: use pkg-config for ncurses detection\n\nFrom Linux commits be8af2d54a66 (\"kconfig/lxdialog: get ncurses CFLAGS\nwith pkg-config\") and 7285996aa000 (\"kconfig: nconfig: fix multi-byte\nUTF handling\").\n\nOur Kconfig was built off of Linux\u0027s back in 2013, and it\u0027s showing its\nage with more recent toolchains and libraries.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "f3c9ddf34aa40d4d39f38fe8a0c336ac8a0c457c",
      "tree": "f7e6c5cdee767f9a811c0e4801809e74a865c2c6",
      "parents": [
        "8ce32bf08819c991977c67296eb8ed79696aaaaf"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Nov 14 20:58:19 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Nov 14 20:58:19 2019 -0500"
      },
      "message": "Show inlined functions with bt-akaros.sh (kernel)\n\nI noticed syzkaller was printing out additional backtrace lines with\ninfo about inlining functions.  addr2line does that for us, spitting the\ninfo out on two lines.  With a little Bash magic, we can parse those\nlines too.\n\nNow something like this:\n\n #04 [\u003c0xffffffffc2059e3e\u003e] in __try_wait_any.isra.7\n #05 [\u003c0xffffffffc205bf3a\u003e] in sys_waitpid\n #06 [\u003c0xffffffffc205c849\u003e] in syscall\n\nwill show up as:\n\n #04 [\u003c0xffffffffc2059e3e\u003e] in __try_wait_any() at kern/src/syscall.c:1221\n #05 [\u003c0xffffffffc205bf3a\u003e] in wait_any() at kern/src/syscall.c:1286\n #05 [\u003c   (inlined by)   \u003e] in sys_waitpid() at kern/src/syscall.c:1329\n #06 [\u003c0xffffffffc205c849\u003e] in syscall() at kern/src/syscall.c:2582\n\nFrame 5 is repeated twice.  The actual address, which the kernel\u0027s\nsymtab says in in sys_waitpid(), is actually in wait_any().  Both the\ninlined function (wait_any()) and the function it is in are reported.\n\nThe previous version of bt_akaros was printing the correct line number\n(1286); you\u0027d just have to notice when you opened the code that it is in\nwait_any(), which might not be obvious if you\u0027re looking at a slightly\ndifferent kernel source.\n\nOverall, this gives us more info when processing backtraces in that we\ncan see the inlining and call graph.  For example, here\u0027s a backtrace\nsyzkaller caught:\n\n #03 [\u003c0xffffffffc20496db\u003e] in kref_put\n #04 [\u003c0xffffffffc204d520\u003e] in proc_destroy\n #05 [\u003c0xffffffffc2058c36\u003e] in sys_proc_destroy\n\nThat doesn\u0027t tell us much.  It is much better with inlining:\n\n #03 [\u003c0xffffffffc20496db\u003e] in kref_put at include/kref.h:68\n #04 [\u003c     [inline]     \u003e] in proc_decref at src/process.c:587\n #04 [\u003c     [inline]     \u003e] in proc_disown_children at src/process.c:853\n #04 [\u003c0xffffffffc204d520\u003e] in proc_destroy at src/process.c:932\n #05 [\u003c0xffffffffc2058c36\u003e] in sys_proc_destroy at src/syscall.c:852\n\nNote this is independent of CONFIG_BETTER_BACKTRACES, which just sets\n-fno-optimize-sibling-calls.  This change is all about getting more info\nfrom the backtrace the kernel spits out.  BETTER_BACKTRACES is about\nmaking the kernel spit out more frames.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "8ce32bf08819c991977c67296eb8ed79696aaaaf",
      "tree": "215794f8822955eac1588ce9d62ec7c804b7e009",
      "parents": [
        "8b4e389296c5ed5e3a3c5c3fc0a6bc9fafd3d26b"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Nov 06 13:25:25 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Nov 06 13:43:32 2019 -0500"
      },
      "message": "Unmap pages mapped during a failed fill_vmr()\n\nIf we get part of the way through filling the VMR with the parent\u0027s\ncontents, but then run out of memory, we were leaving the old,\nsuccessful PTE mappings behind.  The VMR would be freed and never\nadded to the proc\u0027s list, so we wouldn\u0027t unmap it during __proc_free().\nHowever, our assert would catch that the process still has mapped pages\nthat weren\u0027t a part of any VMR.\n\nI\u0027m not 100% that this is what happened with syzkaller, but it\u0027s a\nlikely scenario, especially since other bugs it found recently are due\nto running low/out of memory.\n\nReported-by: syzbot+28ec6ca66d7b660fbf4d@syzkaller.appspotmail.com\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "8b4e389296c5ed5e3a3c5c3fc0a6bc9fafd3d26b",
      "tree": "7763ae41c270d19fd1a1b7226dc71c3e294f0246",
      "parents": [
        "7a1e025a7fa589ddb1c72f1f8e54cb0bb7ce8391"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Nov 06 13:21:37 2019 -0500"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Nov 06 13:21:37 2019 -0500"
      },
      "message": "Handle ENOMEM during fork()\n\nReported-by: syzbot+638411bd4594d01e2d70@syzkaller.appspotmail.com\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "7a1e025a7fa589ddb1c72f1f8e54cb0bb7ce8391",
      "tree": "a1f0a10458cc58d9a981e5a6cad55b3538ec815b",
      "parents": [
        "2aa94575a5a7b809c593f73487f25ec4e2e90098"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Oct 23 18:56:05 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Oct 23 19:06:29 2019 -0400"
      },
      "message": "vmm: reimplement the x86 instruction decoder\n\nOur old decoder had a bunch of issues.  Whenever we get a new version of\nLinux, we tend to have new instructions that need decoding.  The old\ndecoder was hard to extend, and it was also hiding a bunch of bugs.\n\nHere are some of the problems the old decoder had:\n- It assumed every operation was a load or store.  Including cmp (which\ndoes not change registers/memory) and add (which does change them, but\nonly after adding).\n- It did not set rflags\n- It did not zero-extend 32-bit wide register results\n- *word was busted.  At one point, we did word++ when we meant to\nadvance by a byte.\n- etc.\n\nThe code was pretty \u0027swirly\u0027 too, where you\u0027d have similar processing\nrepeated all over the place, like the REX checks.\n\nTo fix that, I added a \u0027decode\u0027 struct, to pass along values that we\ndetermined, such as address size, operand size, rex bits, etc.\n\nBest of all, we weren\u0027t computing the size correctly, since we didn\u0027t\nreally do the modrm handling right.  Here\u0027s the case:\n\n\t81 7d 00 5f 4d 50 5f    cmp    DWORD PTR [rbp+0x0],0x5f504d5f\n\nThat was being treated like it is only 4 bytes long, instead of 7.\nWhoops!\n\nHowever, it didn\u0027t crash, even though we set RIP to be part way (4\nbytes) into the instruction!  Why?  well, those extra three bytes that\nare just arbitrary numbers in the immediate32 part of the instruction\n(which we end up running) decodes too!\n\n\t0:  4d 50                   rex.WRB push r8\n\t2:  5f                      pop    rdi\n\nIt pushes and pops, essentially clobbering rdi.  The Linux guest ends up\nresetting rdi later, so no one noticed.\n\nHad it been another value for the immed, we\u0027d execute that too.  It\nmight blow up, and we\u0027d notice.  But this one silently executed and\nsilently trashed a register.\n\nTo fix that, I needed better mod/rm+sib handling.  We still get away\nwith using GPA instead of decoding modrm+sib and translating through the\nguest\u0027s page tables.  Ron\u0027s comment still applies.  \u003d)\n\nTo handle the emulation of instructions, I had our callers pass us the\n\u0027access()\u0027 function.  So we can handle read-modify-write instructions,\nlike add.  Those didn\u0027t need to change too much, though I yanked out\ndestreg, which was just debug clutter.\n\nI could have broken the commit up a little bit, but there wasn\u0027t a lot\nof value in it, since the whole thing needed to be overhauled.\n\nNote that the APIC_ACCESS and WRITE exits never happen.  That might have\nbeen the case ever since we started using the x2APIC for the guest.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "2aa94575a5a7b809c593f73487f25ec4e2e90098",
      "tree": "feaa5ec1f0b66b89212b2856475b1a0034f6c6e1",
      "parents": [
        "d3909279af09a867e4c71e34f5d37ff2a304c24c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Oct 23 18:34:14 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Oct 23 18:56:56 2019 -0400"
      },
      "message": "x86: add FL_STATUS (XCC)\n\nHelpful for our x86 decoder.\n\nReinstall your kernel headers.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "d3909279af09a867e4c71e34f5d37ff2a304c24c",
      "tree": "db947a7ef697187fbb39cea4690352ecef428eab",
      "parents": [
        "bfc2c2193d88e3e0e08a6f50e6d12ea9e854c815"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:08:17 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "x86: clean up MSI handlers and vectors\n\nWith this change, drivers can deregister their IRQs, shut down their\ndevices, and reinitialize them.\n\nTested with MSI-X, but not MSI.  The IOAT device I have for testing is\nMSI-X only.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "bfc2c2193d88e3e0e08a6f50e6d12ea9e854c815",
      "tree": "53cf7c428ff9bb2796c441e4ffa080b1b8f7a8ad",
      "parents": [
        "a2ee762b39cc6adf806feaaa020c7ace82ba4a44"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:00:23 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "x86: use a proper allocator for IRQ vectors\n\nYet another arena allocator!\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "a2ee762b39cc6adf806feaaa020c7ace82ba4a44",
      "tree": "0a0dce7509c6a81e8df13e26c9dcfb56d16985f7",
      "parents": [
        "12473793ed372046a3380235a92b8000b73598a4"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 14:22:30 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "x86: msi: refactor pci_msi_enable()\n\nPulled out the setting-of-the-addr-and-data into its own function, and\nclarified the difference between msi_ready and msix_ready.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "12473793ed372046a3380235a92b8000b73598a4",
      "tree": "66b68b05aa2570689bf6aa94797a35487e55d0ca",
      "parents": [
        "fdab235440547f6a1a0f1a77a169106d526791a5"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Oct 07 16:12:52 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "x86: add deregister_irq()\n\nIt\u0027s about as good as register_irq().\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "fdab235440547f6a1a0f1a77a169106d526791a5",
      "tree": "096c0548d0d4312b1936dacb99484d4f97d40587",
      "parents": [
        "b03c307380c4f4a55bb62ae98b93869d801fac65"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Oct 07 15:37:22 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "x86: use RCU to protect the IRQ handlers list\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "b03c307380c4f4a55bb62ae98b93869d801fac65",
      "tree": "a4150052415f74680a3ada232f4d4688e8ab0a2f",
      "parents": [
        "dd5df3fe96f749bf740b32bc06725ff556c0df25"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Oct 07 15:12:13 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "x86: return the irq_handler from register_irq()\n\nregister_irq() is a mess.  This helps a little - at least the caller can\ndetermine the vector assigned.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "dd5df3fe96f749bf740b32bc06725ff556c0df25",
      "tree": "6e13398c3ce1d9977f3193e42ba8bd6e3014d50c",
      "parents": [
        "fcabc288df9a44a86be68bde2c64eda38f1799b9"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:01:32 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "Remove the KADDR check from pahexdump()\n\nWe\u0027re hexdumping physical memory.  Just hexdump the damn thing.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "fcabc288df9a44a86be68bde2c64eda38f1799b9",
      "tree": "85275a8939d5fce4ca85dc2cef8a2fd1c17143dc",
      "parents": [
        "d3910e1c9ffcfc0df36c7687c6779275c5bc91b9"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 01 10:04:34 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "dma: rewrite DMA allocations with arenas and KMCs\n\nA dma_pool is now just a slab allocator on top of a struct dma_arena.\nThese allocators provide device-accessible memory *allocations*.  You\ncan still \u0027DMA-map\u0027 kernel memory for drivers.  This is just for the\nLinux DMA alloc APIs, for now.\n\nThe reason for some of the kpages-\u003epaddr-\u003ekaddr acrobatics is I want to\nsupport address spaces other than physical and kernel virtual.\nSpecifically, I\u0027d like to try to keep a driver in the kernel, but with\nthe device operating in the user\u0027s address space, i.e. behind an IOMMU.\nIn that sense, the driver *code* is like a syscall in the user\u0027s address\nspace, and the device is like a processor in Ring 3.  We\u0027ll see.\n\nEventually, we could make all of our drivers use these, and perhaps sort\nout how to do DMA pinning with the same sense of device addresses.\n\nIf it turns out this is a horrible idea, we can make the dma_pool just\npull from kpages and be done with all the to_cpu_addr() translations.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "d3910e1c9ffcfc0df36c7687c6779275c5bc91b9",
      "tree": "e2f786141bb6b7ddb36d8975fcfedc3aaece0ea0",
      "parents": [
        "9d968c701eaa3fb219c3e99aed1e396c257c4e10"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Oct 03 17:02:24 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: free the expanded hash table\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "9d968c701eaa3fb219c3e99aed1e396c257c4e10",
      "tree": "ff840ed71672f55e8e2b412ffdcf446b9744bf3a",
      "parents": [
        "ef80538ba1b9b6d49380eb0f7fbf0612db2f7f3b"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Oct 02 14:47:02 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: add __arena_create() and __arena_destroy()\n\nThese are lower level interfaces where the caller handles memory.  If\nyou want any half-way usable self-sourced arena, you\u0027re going to embed\nit in another struct, and container_of() to that struct in the arena\nalloc/free funcs.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "ef80538ba1b9b6d49380eb0f7fbf0612db2f7f3b",
      "tree": "0b81a4f54ebb3c37a39c272b28ebdb069a203c5a",
      "parents": [
        "a4708521d495ae3c9086a38e6241aa984953f684"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Oct 02 14:30:50 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: check for imports when destroying\n\nThis catches bugs where we tear down an arena while other arenas or\nslabs still depend on it.  It\u0027s the equivalent of a use-after-free.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "a4708521d495ae3c9086a38e6241aa984953f684",
      "tree": "65baa305fcb45d623b6437376d16590430997807",
      "parents": [
        "04266733eeeabe6b03ca4f3fa39a256f8c59249b"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Oct 02 12:52:10 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: allow \"self-sourced\" arenas\n\nThese arenas generate their own resources dynamically and arbitrarily.\nThey do not source from another arena, such as base, but they also are\nnot given their segments in advance with arena_add().  Instead, they\ncreate resources when asked.\n\nIt is similar to calling arena_add() in response to a failed allocation,\nexcept the allocation never fails.\n\nThe arena alloc function pointer lets you do whatever you want.  The\nreason for self-sourcing instead of pulling from a dummy arena is that\nthe self-source provides a pointer to the arena in the allocation\nfunction.  With that pointer, you now have your original arena, which\ncould be embedded in another structure.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "04266733eeeabe6b03ca4f3fa39a256f8c59249b",
      "tree": "21b5079eec675035c98c53f06a4e8b683fb6e655",
      "parents": [
        "16385e80bfcf024ad9e78d798e48fc62133cd483"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 30 15:13:42 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: trigger allocation failure for failed ctors\n\nWe were just returning NULL, which would have MEM_WAIT allocs return\nNULL.  It\u0027d usually panic immediately - this way we catch it a little\nearlier in a common path.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "16385e80bfcf024ad9e78d798e48fc62133cd483",
      "tree": "48653c012116f541a6b8e563b65b01c6e18e4d4d",
      "parents": [
        "38ec4fd33e127114ebf0fbddb42f84152851e672"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 30 14:42:53 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: warn about duplicated KMC names when tracing\n\nInstead of during creation.  The IOAT driver creates a KMC call\n\u0027completion_pool\u0027 for every device.  I\u0027m not going to bother giving them\nseparate names.  The only thing we used duplicate names for was\ndebugging and slab_trace.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "38ec4fd33e127114ebf0fbddb42f84152851e672",
      "tree": "6bc2a2ec4a78502eac6e775684142f3ae5e27ee1",
      "parents": [
        "6715261adf02cdbed1e4a18b8160f7f56c134849"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 30 14:08:12 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: fix qcache double-free\n\nThis was nasty.  The qcache would be freed twice, which meant that it\nwould get reused twice.  It resulted in the full_slab_list having weird\nshit on it: it looked like a SLIST of magazines!\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "6715261adf02cdbed1e4a18b8160f7f56c134849",
      "tree": "308825b811940b7398ed4ad5e20761e94ef67ceb",
      "parents": [
        "47453c5a6511acda46e5c4dae291be462ab25c0c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 27 11:22:26 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: add __kmem_cache_destroy()\n\nLike __kmem_cache_create(), it operates on a KC whose memory is managed\nby the caller.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "47453c5a6511acda46e5c4dae291be462ab25c0c",
      "tree": "fc58f4437caf7f650006c6f4ec51017ac5e56c9f",
      "parents": [
        "46cfc69bdb8606be7693f88fb235cd8bd85a83a4"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Thu Sep 26 12:40:07 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: add arena tests\n\nAnd some details about the difference between qcaches and regular slab\nallocators.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "46cfc69bdb8606be7693f88fb235cd8bd85a83a4",
      "tree": "e09060e41e1bd966e56ccc566a05325eca5f2628",
      "parents": [
        "a8334d4fbb80fe5c09fedf9aab461c48f7d6e305"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Sep 25 16:17:53 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: use a singly-linked list for bufctls\n\nIt saves a pointer for each bufctl.\n\nI glanced at arena.c for the same thing.  The code for those\nFOREACH-remove_if_X are a little more involved, but not a big deal.  But\nthe big one is untrack_free_seg, which isn\u0027t called from a list-foreach.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "a8334d4fbb80fe5c09fedf9aab461c48f7d6e305",
      "tree": "ce0634a01df1e6a1b7ae7f1bf369c39fdabe3952",
      "parents": [
        "0d3e65d740a2462175d988f8795829f8869b888e"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Sep 25 15:51:38 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: don\u0027t assume allocations succeed\n\nA couple places assumed a MEM_ATOMIC allocation would succeed.  You can\ntell they are old places since they still passed \u00270\u0027 for a flag.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "0d3e65d740a2462175d988f8795829f8869b888e",
      "tree": "6015ec0ee8963f051ca7c30be1218615f9b5e027",
      "parents": [
        "297a5ff74809119736ced0303cf380303dd88554"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 16 12:19:57 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: fix alignment issues\n\nThis clarifies many of the issues around alignment and source quantum.\n\nPreviously, there were a lot of assumptions about source alignment\n(assumed PGSIZE, but it was actually quantum), object size (assumed big\nenough for a pointer), etc.  If you had an arena with quantum \u003e PGSIZE\nand made a slab / KC from it (e.g. a qcache), you\u0027d trip the assertion\ntoo.\n\nWe also didn\u0027t have any guarantees about carrying a source\u0027s\nquantum-multiple-alignment through to the slab, which matters for\nnon-power-of-two sources that want to use qcaches.  We use the \"if\nobj_size is a multiple of quantum, you\u0027ll get quantum-multiple-aligned\nallocations\" guarantee to solve the problem for qcaches.\n\nSlab align is a separate item from both arena quantum and arena align.\nThe object we get from a source gets aligned up (or is already the right\nalignment, for the pro-touch/non-bufctl case), which requires us to\ntrack the original address from the arena in the slab.  That\u0027s fine.\nMight as well use that for the pro-touch case.\n\nI considered getting rid of PGSIZE, but its usage in obj-\u003eslab lookups\nis pretty handy.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "297a5ff74809119736ced0303cf380303dd88554",
      "tree": "8a1e4ff021b550f2e91b7c72d5279f7ea1004505",
      "parents": [
        "39cfb33943319d5b5e83e08c4fef07bfef716f4d"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Sep 24 12:23:27 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: fix xalloc minaddr|maxaddr\n\nTwo problems:\n- if you had a single segment that contained minaddr, we\u0027d skip that\nsegment and start with the *next* one.  Not only did this mean we\nskipped a perfectly good segment that could have had the fix, but we\nmight not have a *next* segment, causing an OOM / failure.\n\nThe fix was to find the BT that contained minaddr, not just the strict\nupper bound.  This means we need to handle the case where BT contains\nminaddr: hence try_start and try_size.\n\n- We\u0027d scan the list of all nodes starting from the upper bound (and now\nequality), regardless of whether or not they are free.  Yikes!\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "39cfb33943319d5b5e83e08c4fef07bfef716f4d",
      "tree": "bac37b89300c8941a4b547aa8004e4e07f734b68",
      "parents": [
        "4249ab915a31945601fa82f714d942f917cb0f9c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 13 16:48:51 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: allow a nocross xalloc() with a source arena\n\nWhen we need to import segments from a parent arena to satisfy an\nxalloc, we need to make sure that a successful import actually satisfies\nthe xalloc.\n\nThis doesn\u0027t seem easily solvable for min/maxaddr, short of pushing the\nxalloc all the way down the chain or having some other inter-arena\ninterface.  But it should be solvable for nocross, by getting a large\nenough allocation.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "4249ab915a31945601fa82f714d942f917cb0f9c",
      "tree": "4640e9b94a000925074865506388e82b35272aa1",
      "parents": [
        "f29e71bb4424ea9e1a3cfccd4985e18fd23e42b9"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 23 16:17:29 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "Add a helper for least common multiple\n\nFor one number being a power of two.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "f29e71bb4424ea9e1a3cfccd4985e18fd23e42b9",
      "tree": "3787e4408a969105a570e6044b9c45d268441665",
      "parents": [
        "b1c32770858844766af8fee1d32a6c92f57a2041"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 16 11:38:31 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: fix __arena_add() quantum alignment issue\n\n__arena_add() was asserting that the span we were adding was quantum\n\u0027aligned.\u0027  However, our source gives us allocations according to *its*\nquantum, not our quantum.  If our source was e.g. bytes and we give out\npages, then our source could give us a span that does not match our\nquantum.\n\nThis is fine, albeit a source of fragmentation.  We just make sure our\narena\u0027s bt tracks the object we want (on a quantum boundary and a\nmultiple of quantum).  span_bt will track whatever we actually got from\nour source.\n\nAnother note: ALIGNED() checks on quantum were currently wrong - there\u0027s\nnothing in the arena code that forced quantum to be a power of two.  At\nleast, I didn\u0027t see it, and don\u0027t want to restrict us to that yet.\nThough we\u0027ll likely have issues with align, non-aligned quantums, and\nqcaches.  For instance, if you ask for a quantum of 3, with an align of\n64, the qcaches were told to do an align of 3 (quantum).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "b1c32770858844766af8fee1d32a6c92f57a2041",
      "tree": "4b7ea3e57f4e804d52000473465442564385a85c",
      "parents": [
        "e535186e6003225e8d9a12b4d81616f2cf900886"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Sep 24 10:48:57 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: let the kernel call kmemstat()\n\nFor debugging.  The user\u0027s interface is #mem/kmemstat.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "e535186e6003225e8d9a12b4d81616f2cf900886",
      "tree": "a06e7a50e0a16e115b608ee52208f8af453ec057",
      "parents": [
        "5569b30150bb385b2bbee9661926563b9e7bc21b"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 23 19:50:12 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: destroy qcaches when destroying arenas\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "5569b30150bb385b2bbee9661926563b9e7bc21b",
      "tree": "7d24ca407138e31c5ff7211857fc5156b7780bde",
      "parents": [
        "43e35e934d04d776adc086e997e2ab139f201080"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 23 19:36:11 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena/slab: warn when destroying unfreed items\n\nInstead of panicking.  This leaks resources, but keeps the machine\nrunning.  It\u0027s a little hokey, since any attempt to free the objects\nwill run into issues.  Though if someone forgot to free it, hopefully\nthey won\u0027t free it before we can use the machine for some last minute\ndiagnostics.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "43e35e934d04d776adc086e997e2ab139f201080",
      "tree": "5fc60bb931d6333abbac0a5c2ecc998ca623c0e3",
      "parents": [
        "57741b64971a7c86e5940281076ebc3b36afb627"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 23 19:24:03 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "slab: remove magazines from lists in depot_destroy()\n\nThis never worked - if there were any magazines, we\u0027d keep on looping\nuntil we crashed.  It\u0027d be nice if there was a BSD SLIST_POP_FIRST() or\nsomething.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "57741b64971a7c86e5940281076ebc3b36afb627",
      "tree": "a5c820d3103ff94c175454d0da805fab8d998617",
      "parents": [
        "0568fc9d8de108f16a4663e06655aef0f992bdf4"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 23 16:29:15 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: warn instead of panic for free-checks\n\nThese checks are signs of bugs, but we can proceed by just returning.\nFor the size-mismatch, we could try and free the correct size, but since\nthere is some bug, we should be safe and just not free anything.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "0568fc9d8de108f16a4663e06655aef0f992bdf4",
      "tree": "baad31a19f8229679c03366e5d92a88c62d3ae9d",
      "parents": [
        "3296159321ec1f211fa3f4c6178c4bd95632ab63"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 23 16:27:26 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: allow freeing NULL\n\nThis is a convenience for test code.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "3296159321ec1f211fa3f4c6178c4bd95632ab63",
      "tree": "6e9c46bc5bb4ee8eac7f89c3db1a98b43708dfbe",
      "parents": [
        "7af6458111579bd2c8d6382958333edcb24f6634"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 23 16:20:32 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: do not round-up when picking xalloc lists\n\nThe list we start at is an optimization.  We could easily start at the\nfirst list.  We skip to the first list that *can* satisfy us.\nPreviously, due to align and phase acrobatics, we could jump to the next\nlist beyond the one that could satisfy us, which could lead to an \"OOM\"\nwhen we actually had the resource.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "7af6458111579bd2c8d6382958333edcb24f6634",
      "tree": "739e8af712520b5b7aed4118838a28485a9618d2",
      "parents": [
        "6f8a177c6c8131548ec035cde8eba6a7952989d5"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 13 17:27:58 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: use the entire imported span\n\nThe source arena will round up to its quantum.  However, we would only\nknow that we got \u0027import_size\u0027, but we might get far more than that from\nthe parent.  If we round-up in advance, we\u0027ll know how much we are\ngetting.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "6f8a177c6c8131548ec035cde8eba6a7952989d5",
      "tree": "9a2d952059755a91d9351b53f8bca32bc52d0d2a",
      "parents": [
        "ddae88813f88101174433d61cffd565bffbe7ab8"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 20 11:14:56 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: fix btag freeing in arena_destroy()\n\nWe are freeing the btags, not the objects they point to.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "ddae88813f88101174433d61cffd565bffbe7ab8",
      "tree": "2f5b2b87e997e7f1ebe4ad81978848d87b5af5a8",
      "parents": [
        "a999add97c4a30e682178ad321866ab35ce185d5"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Sep 16 15:12:21 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "arena: make \u0027name\u0027 a const char *\n\nI\u0027d like to build an arena from Linux code, which tends to use \u0027const\nchar*\u0027 more aggressively than we did.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "a999add97c4a30e682178ad321866ab35ce185d5",
      "tree": "773001774cfe3c4b31b269af6d7a776a5b0b1da3",
      "parents": [
        "13495665c87ff1c83f0c071daa09619a0aefce2c"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 13 16:23:42 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "Include linux/overflow.h and sys/types.h in all files\n\nJust about every C file needs types.h, and I\u0027d like the overflow checks\nto be as easy as builtins.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "13495665c87ff1c83f0c071daa09619a0aefce2c",
      "tree": "f6c0a5ccc55464730d73806ce8f6fcca3ebd5ba8",
      "parents": [
        "664169bb22c2cdf0a0f7bc91d8d5cedf4cd414ad"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 13 16:19:03 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:11 2019 -0400"
      },
      "message": "Add shortened integer typedefs\n\nThis adds typedefs such as u64 for uint64_t.\n\nI got tired of needing to run spatch and changing Linux code as much.\nFrom now on, you can use whichever you\u0027d like in the kernel, especially\nif the code came from another project.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "664169bb22c2cdf0a0f7bc91d8d5cedf4cd414ad",
      "tree": "377d00ead5f35432e0347f3010d92bb31bdb3ef5",
      "parents": [
        "45713203f5c37be3ff83be4d4c594628ed817fb7"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 13 14:26:07 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "Add overflow.h from Linux\n\nv5.2.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "45713203f5c37be3ff83be4d4c594628ed817fb7",
      "tree": "ce606e7371224f45efb4d658b4862315715266af",
      "parents": [
        "ca9ead69007541982ec2d8dbed8c3e29e25d5976"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 13 11:15:02 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "scripts: handle kernel backtraces with bt-akaros.sh\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "ca9ead69007541982ec2d8dbed8c3e29e25d5976",
      "tree": "857966b12a76d4aa54a8f47718b147fcc1cc375f",
      "parents": [
        "a2a52bcb7ea1c6aec0c10c348f25455caa4389dc"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Aug 30 15:52:34 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "ioat: port the IOAT driver\n\nPasses the self-test.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "a2a52bcb7ea1c6aec0c10c348f25455caa4389dc",
      "tree": "ac28b74b808bc539fba4e76f36d4022fa499ffb7",
      "parents": [
        "79a1d3997fcbf9cea8b98a0318812de6045581d4"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Aug 26 14:22:40 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "ioat: spatch the IOAT driver\n\nfor i in scripts/spatch/linux/*.cocci\ndo\n\t./scripts/spatch/spatch-me.sh $i yes kern/drivers/dma/ioat/\ndone\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "79a1d3997fcbf9cea8b98a0318812de6045581d4",
      "tree": "9a2c5b8a791b0299fffb619248fa36cc4a992976",
      "parents": [
        "abd07f79e96c99ffac919982902a2e3f70ff2d43"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Mon Aug 26 14:19:02 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "ioat: import the IOAT driver from Linux\n\nFrom drivers/dma/ioat/, Linux 5.2.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "abd07f79e96c99ffac919982902a2e3f70ff2d43",
      "tree": "2f8f77aff126369baf775381bc694a4a7273f147",
      "parents": [
        "3eb640f34cacf00930078cb5dbb738cd1d69c5e4"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Aug 28 16:05:49 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "dma: port Linux\u0027s dmaengine\n\nThere are no users or devices yet.  This compiles and runs the\ninitialization code.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "3eb640f34cacf00930078cb5dbb738cd1d69c5e4",
      "tree": "35f962fc5895e32fd8ecf385ca005adacaf19527",
      "parents": [
        "0131abaccf13143ebcb907d083ecfbe118f9ba49"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Aug 27 15:14:36 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "dma: spatch Linux\u0027s dmaengine files\n\nRan the scripts in scripts/spatch/linux/:\n\tfuncs.cocci  io_funcs.cocci  memory.cocci  scalar.cocci  sync.cocci\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "0131abaccf13143ebcb907d083ecfbe118f9ba49",
      "tree": "c024c9e40782d873d3875242b672cbff7ffde97b",
      "parents": [
        "8abcdab3ca33af23758023ba2e13f3cabdf90df6"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Aug 27 15:13:14 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "dma: import dmaengine from Linux\n\nFrom Linux 5.2.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "8abcdab3ca33af23758023ba2e13f3cabdf90df6",
      "tree": "0ca27c0f2f5dbd4e9d764a1c138d44f6d3028e27",
      "parents": [
        "d36ce89ec88cfdd32330d9aae8400252e7b40a55"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Aug 28 16:54:07 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "Port Linux\u0027s sizes.h\n\nThis is a minor change.  Right now we don\u0027t need this header in\nassembly, and likely won\u0027t, so it\u0027s simpler to just change the header\nthan to import const.h and uapi/const.h.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "d36ce89ec88cfdd32330d9aae8400252e7b40a55",
      "tree": "ae80f3c2ba33b34ba012a3e6626df85a44c1395a",
      "parents": [
        "4e65d627c3ed5a5b9d3c128d8b405e11f300bae6"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Aug 28 16:52:09 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "Add Linux\u0027s sizes.h\n\nFrom 5.2.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "4e65d627c3ed5a5b9d3c128d8b405e11f300bae6",
      "tree": "cc63afd5da0556921eeb946244eefcf7a6b88295",
      "parents": [
        "f7c2136c5a0009bfddd1a462eebc2a2c29bddf8f"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Wed Aug 28 16:23:54 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "Add Linux\u0027s circ_buf.h\n\nFrom 5.2.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "f7c2136c5a0009bfddd1a462eebc2a2c29bddf8f",
      "tree": "84a87149870e9768ee56661c5d08c953a99d6a78",
      "parents": [
        "9ce799f5a81541bbc7472b53696bc2a4390c83eb"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Aug 30 15:36:10 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "spatch: add a few features to the Linux coccis\n\nNotably, the lock transform was mismatched.  We\u0027d set all locks to be\nirqsave (by the init function), but the _bh locks were not irqsave.\n\nThe issue here is that _bh locks *don\u0027t* need to be irqsave, but we\ndon\u0027t know when we look at spinlock_init where the lock is grabbed.  At\nleast not easily.  So since we say all locks are irqsave, we need to be\nconsistent.\n\nAnother option would be to keep them as spin_lock_bh and #define it, so\nwe keep the info that it is a bh lock.  Or if we really care about a\nslightly lower lock in a Linux driver, we just look at the changelog.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    },
    {
      "commit": "9ce799f5a81541bbc7472b53696bc2a4390c83eb",
      "tree": "0f6f21ac147625fc549d4aff308279a5f1edb5dd",
      "parents": [
        "ab58204edfba565a724724faf9a8e7e9ccce94fb"
      ],
      "author": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Fri Sep 27 12:29:48 2019 -0400"
      },
      "committer": {
        "name": "Barret Rhoden",
        "email": "brho@cs.berkeley.edu",
        "time": "Tue Oct 08 17:11:10 2019 -0400"
      },
      "message": "spatch: fix Linux\u0027s typedef coccis\n\nYou need to tell spatch about typedefs that aren\u0027t part of C.  \u0027int\u0027 is\nfine.  \u0027uint32_t\u0027 is not.  I\u0027m not sure if this worked before, or if\nmore recent versions of spatch started to fail for it.  The Plan 9\ncocci files were fine.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n"
    }
  ],
  "next": "ab58204edfba565a724724faf9a8e7e9ccce94fb"
}
