)]}'
{
  "log": [
    {
      "commit": "7c4cb60e5b97677424e95baee9c29df54b26e6ba",
      "tree": "a2ad6e6104e153d15bc4bfbb67f74b0e05fea03c",
      "parents": [
        "599a6e8ca4ff7f453f847217ecc2718d68e3b0f6"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Fri Jan 06 00:11:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:33 2006 -0800"
      },
      "message": "[PATCH] x86: GDT alignment fix\n\nMake GDT page aligned and page padded to support running inside of a\nhypervisor.  This prevents false sharing of the GDT page with other hot\ndata, which is not allowed in Xen, and causes performance problems in\nVMware.\n\nRather than go back to the old method of statically allocating the GDT\n(which wastes unneded space for non-present CPUs), the GDT for APs is\nallocated dynamically.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nCc: \"Seth, Rohit\" \u003crohit.seth@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "251e6912df43df54570ed68aade703b329c6cd5b",
      "tree": "28695a0c9a468281613a6b8ef8c79596e2764001",
      "parents": [
        "72e12b76fe48d99d1deb417f177b10a9d99b2e74"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sun Oct 30 14:59:34 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:12 2005 -0800"
      },
      "message": "[PATCH] x86: add an accessor function for getting the per-CPU gdt\n\nAdd an accessor function for getting the per-CPU gdt.  Callee must already\nhave the CPU.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f2f30ebca6c0c95e987cb9a1fd1495770a75432e",
      "tree": "ea7b1763aa0e0d36b52fa245449c79338fe735b3",
      "parents": [
        "e9f86e351fda5b3c40192fc3990453613f160779"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sat Sep 03 15:56:47 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:06:13 2005 -0700"
      },
      "message": "[PATCH] x86: introduce a write acessor for updating the current LDT\n\nIntroduce a write acessor for updating the current LDT.  This is required\nfor hypervisors like Xen that do not allow LDT pages to be directly\nwritten.\n\nTesting - here\u0027s a fun little LDT test that can be trivially modified to\ntest limits as well.\n\n/*\n * Copyright (c) 2005, Zachary Amsden (zach@vmware.com)\n * This is licensed under the GPL.\n */\n\n#include \u003cstdio.h\u003e\n#include \u003csignal.h\u003e\n#include \u003casm/ldt.h\u003e\n#include \u003casm/segment.h\u003e\n#include \u003csys/types.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/mman.h\u003e\n#define __KERNEL__\n#include \u003casm/page.h\u003e\n\nvoid main(void)\n{\n        struct user_desc desc;\n        char *code;\n        unsigned long long tsc;\n\n        code \u003d (char *)mmap(0, 8192, PROT_EXEC|PROT_READ|PROT_WRITE,\n                                 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);\n        desc.entry_number \u003d 0;\n        desc.base_addr \u003d code;\n        desc.limit \u003d 1;\n        desc.seg_32bit \u003d 1;\n        desc.contents \u003d MODIFY_LDT_CONTENTS_CODE;\n        desc.read_exec_only \u003d 0;\n        desc.limit_in_pages \u003d 1;\n        desc.seg_not_present \u003d 0;\n        desc.useable \u003d 1;\n        if (modify_ldt(1, \u0026desc, sizeof(desc)) !\u003d 0) {\n                perror(\"modify_ldt\");\n        }\n        printf(\"code base is 0x%08x\\n\", (unsigned)code);\n        code[0x0ffe] \u003d 0x0f;  /* rdtsc */\n        code[0x0fff] \u003d 0x31;\n        code[0x1000] \u003d 0xcb;  /* lret */\n        __asm__ __volatile(\"lcall $7,$0xffe\" : \"\u003dA\" (tsc));\n        printf(\"TSC is 0x%016llx\\n\", tsc);\n}\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2f2984eb4afb2a4298e3186cb49cc7e88dd6d929",
      "tree": "213dfa4726dd010b226fbfffac9da0fbe140b3fe",
      "parents": [
        "4d37e7e3fd851428dede4d05d3e69d03795a744a"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sat Sep 03 15:56:38 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:06:11 2005 -0700"
      },
      "message": "[PATCH] i386: generate better code around descriptor update and access functions\n\nGCC can generate better code around descriptor update and access functions\nwhen there is not an explicit \"eax\" register constraint.\n\nTesting: You won\u0027t boot if this is messed up, since the TSS descriptor will be\ncorrupted.  Verified the assembler and booted.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4d37e7e3fd851428dede4d05d3e69d03795a744a",
      "tree": "f830928a0baf81f462bc9176dacbaad2dac2bb65",
      "parents": [
        "245067d1674d451855692fcd4647daf9fd47f82d"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sat Sep 03 15:56:38 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:06:11 2005 -0700"
      },
      "message": "[PATCH] i386: inline assembler: cleanup and encapsulate descriptor and task register management\n\ni386 inline assembler cleanup.\n\nThis change encapsulates descriptor and task register management.  Also,\nit is possible to improve assembler generation in two cases; savesegment\nmay store the value in a register instead of a memory location, which\nallows GCC to optimize stack variables into registers, and MOV MEM, SEG\nis always a 16-bit write to memory, making the casting in math-emu\nunnecessary.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
