)]}'
{
  "log": [
    {
      "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"
    }
  ]
}
