Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DMA stops working; needs a reboot #39

Closed
lukego opened this issue Jan 15, 2013 · 44 comments
Closed

DMA stops working; needs a reboot #39

lukego opened this issue Jan 15, 2013 · 44 comments
Labels

Comments

@lukego
Copy link
Member

lukego commented Jan 15, 2013

Problem: DMA stops working for the Intel NIC. Cause unknown. Reboot is only known cure.

The basic symptom is a lack of any values in the NIC counters:

selftest: intel device 0000:00:04.0
NIC transmit test
intel selftest: pciaddr=0000:00:04.0 secs=1
Waiting for linkup.............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:00:04.0:
NIC transmit+receive loopback test
intel selftest: pciaddr=0000:00:04.0 secs=1 receive=true loopback=true
Waiting for linkup............... ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:00:04.0:

For full back story see discussion on commit e5d463e.

@rahul-mr
Copy link
Contributor

I hope the NIC firmware is up-to-date.

Have you tried testing it with ethtool (after the e1000e driver is loaded)?

@lukego
Copy link
Member Author

lukego commented Jan 15, 2013

Here is what I see on bern.snabb.co:

  • This problem is happening on the host.
  • This problem is not happening within a KVM using pcipassthrough.

I have tried stopping the KVM, restarting the KVM, and running on the host both with and without the KVM running. In these tests it has always worked in the KVM and never on the host.

Could be that the DMA-enable code in pci.lua works for QEMU's PCI bridge but not physical ones?

@lukego
Copy link
Member Author

lukego commented Jan 15, 2013

The issue seems to be that the PCI card is not able to do DMA with the HugeTLB memory that snabbswitch has allocated. I see these messages repeatedly in dmesg:

[709668.764714] DRHD: handling fault status reg 3
[709668.764741] DMAR:[DMA Read] Request device [05:00.0] fault addr d8800000 
[709668.764743] DMAR:[fault reason 06] PTE Read access is not set

Looks like this memory needs to be enabled for DMA (in the IOMMU?) somehow. I'm looking for a straightforward way to do this from userspace.

@lukego
Copy link
Member Author

lukego commented Jan 15, 2013

Booting with intel_iommu=off does not help.

@rahul-mr
Copy link
Contributor

On 01/15/2013 10:28 PM, Luke Gorrie wrote:

Booting with intel_iommu=off does not help.

dunno if this helps, but can u try booting kernel with
iommu=force,memaper=3 (taken from here:
http://whiteboard.ping.se/Linux/IOMMU)

check this also:
http://www.mjmwired.net/kernel/Documentation/x86/x86_64/boot-options.txt#230

@lukego
Copy link
Member Author

lukego commented Jan 15, 2013

Dinner time here! Will investigate more tomorrow. Hope we can find a
solution that doesn't need reboot and hacking grub (but that would be good
enough to start with).

On 15 January 2013 18:01, rahul-mr notifications@github.com wrote:

On 01/15/2013 10:28 PM, Luke Gorrie wrote:

Booting with intel_iommu=off does not help.

dunno if this helps, but can u try booting kernel with
iommu=force,memaper=3 (taken from here:
http://whiteboard.ping.se/Linux/IOMMU)

check this also:

http://www.mjmwired.net/kernel/Documentation/x86/x86_64/boot-options.txt#230


Reply to this email directly or view it on GitHubhttps://github.com//issues/39#issuecomment-12277488.

@lukego
Copy link
Member Author

lukego commented Jan 16, 2013

The problem seems to be that the HugeTLB allocated memory doesn't reliably work for DMA. The situation is better when using the old mmap() of /dev/mem memory allocation scheme.

I will create a workaround based on ye olde memmap=16M\$0x10000000 Grub parameter and then look for a way to make the HugeTLB memory work. I cross my fingers that we can find a reliable solution that needs neither a boot parameter nor a helper kernel module.

lukego added a commit that referenced this issue Jan 16, 2013
DMA memory is now sliced out from a "chunk" of available memory.

Chunks can either be supplied by physical address with:
  memory.install(address, size)
or else they are automatically allocated by mmap()ing HugeTLB pages as needed.

So if you want to do the "old style" way of giving DMA memory to
snabbswitch then you can do this:

  Boot Linux with memmap=16M$0x10000000
  Extend e.g. selftest.lua with: memory.install(0x10000000, 16*1024*1024)

and then the first 16MB of allocations will be sliced out of this
memory without allocating a huge page.

This hopefully helps @pkazmier with issue #34. See also issue #39.
@lukego
Copy link
Member Author

lukego commented Jan 16, 2013

The workaround is done now: the commit above (+ the one after). This works on bern.snabb.co.

Going to look more into why HugeTLB pages are not working next. One more theory to explore is that memory.map() is not finding the right physical address for them and so we would pass the wrong addresses to the NIC.

@lukego
Copy link
Member Author

lukego commented Jan 17, 2013

I am continuing to look into this. There are plenty of exciting /proc files to check and cross-check on the hunt for where memory really is.

@pkazmier
Copy link
Contributor

I made a comment on one of the commits about how the rx and tx descriptor base addresses are set. Might this be something in your chase for the odd hugetbl behavior?

f5a3431#commitcomment-2465756

lukego added a commit that referenced this issue Jan 20, 2013
Great detective work by @pkazmier to find the bug an @rahul-mr to
confirm the fix. This seems to make HugeTLB support work reliably.
Descriptor ring addresses were being truncated to 32 bits and this
would break DMA whenever the memory was allocated in high addresses,
tending to happen on physical machines with >4GB RAM more than VMs.

Cool!

See discussion of commit f5a3431.

Closes issue #39.
@rahul-mr
Copy link
Contributor

Hmm, it seems the latest commit f23d5cb doesn't fix this issue. It is interesting to note that during testing with the current master, the 'high' 32 bits of the rx/tx descriptor base addresses always remained 0x00000000

@lukego
Copy link
Member Author

lukego commented Jan 21, 2013

Interesting. This fix is working for me on bern.snabb.co. I see 0x00000003
in the TDBAH/RDBAH registers suggesting that the huge pages have been
allocated from the high part of the 16GB of ram.

Can you help me reproduce a failure with that commit applied?

On 20 January 2013 13:19, rahul-mr notifications@github.com wrote:

Hmm, it seems the latest commit f23d5cbhttps://github.com/SnabbCo/snabbswitch/commit/f23d5cb464ec46cb7de5c423b89c4ec491ec633edoesn't fix this issue. It is interesting to note that during testing with
the current master, the 'high' 32 bits of the rx/tx descriptor base
addresses always remained 0x00000000


Reply to this email directly or view it on GitHubhttps://github.com//issues/39#issuecomment-12469851.

@pkazmier
Copy link
Contributor

It's stopped working on arbon at the moment:

pkazmier@snabbdev:~/snabbswitch/src$ sudo flock -x /tmp/snabb.lock ./snabbswitch
[sudo] password for pkazmier: 
selftest: memory
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 10
  Allocating a 2MB HugeTLB: Got 2MB at 0x32200000
  Allocating a 2MB HugeTLB: Got 2MB at 0x31c00000
  Allocating a 2MB HugeTLB: Got 2MB at 0x24c00000
  Allocating a 2MB HugeTLB: Got 2MB at 0x20a00000
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 10
HugeTLB page allocation OK.
selftest: pci
Scanning PCI devices:
pciaddr         vendor  device  iface   status
0000:00:00.0    0x8086  0x1237  -       -
0000:00:01.0    0x8086  0x7000  -       -
0000:00:01.1    0x8086  0x7010  -       -
0000:00:01.3    0x8086  0x7113  -       -
0000:00:02.0    0x1013  0x00b8  -       -
0000:00:03.0    0x10ec  0x8139  eth0    up
0000:00:04.0    0x8086  0x10d3  -       -
0000:00:05.0    0x1af4  0x1001  -       -
Suitable devices: 
  0000:00:04.0
selftest: intel device 0000:00:04.0
NIC transmit test
intel selftest: pciaddr=0000:00:04.0 secs=1
Waiting for linkup.............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:00:04.0:
NIC transmit+receive loopback test
intel selftest: pciaddr=0000:00:04.0 secs=1 receive=true loopback=true
Waiting for linkup.............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:00:04.0:

@pkazmier
Copy link
Contributor

FWIW: Ever since I got my Intel controller working, I've yet to stumble across a case where it stops working (i.e., no packet statistics are displayed). I've got the day off from work for today, so I hope to do some more investigation. In the meantime, I fired up this loop on my box to see if it's stops working:

root@world:/home/kaz# while /bin/true
> do
> echo -n "TIMESTAMP: "
> date
> ./snabbswitch 
> done >> /tmp/debug.txt

In another window, I'm just tailing the log file tail -f /tmp/debug.txt | egrep 'TIMESTAMP|TPT'. I'll keep an eye on this to see if it ever stops working like it has on arbon. Like bern, my host is not running in a VM, but rather the host directly.

(and yes, I've disabled my call to memory.install so that I'm using HugeTLB pages instead)

@pkazmier
Copy link
Contributor

Re: my last comment, the loop has been running for quite some time now (1,621 runs to be exact), and it still runs successful. I cannot seem to reproduce the issue where the stats stop printing out when I run snabb in my environment. I'll let in run overnight though.

@rahul-mr
Copy link
Contributor

Sample run in arbon:

selftest: memory
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 10
  Allocating a 2MB HugeTLB: Got 2MB at 0x3aa00000
  Allocating a 2MB HugeTLB: Got 2MB at 0x32000000
  Allocating a 2MB HugeTLB: Got 2MB at 0x20800000
  Allocating a 2MB HugeTLB: Got 2MB at 0x20200000
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 10
HugeTLB page allocation OK.
selftest: pci
Scanning PCI devices:
pciaddr         vendor  device  iface   status
0000:00:00.0    0x8086  0x1237  -       -
0000:00:01.0    0x8086  0x7000  -       -
0000:00:01.1    0x8086  0x7010  -       -
0000:00:01.3    0x8086  0x7113  -       -
0000:00:02.0    0x1013  0x00b8  -       -
0000:00:03.0    0x10ec  0x8139  eth0    up
0000:00:04.0    0x8086  0x10d3  -       -
0000:00:05.0    0x1af4  0x1001  -       -
Suitable devices: 
  0000:00:04.0
selftest: intel device 0000:00:04.0
NIC transmit test
intel selftest: pciaddr=0000:00:04.0 secs=1
Waiting for linkup............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:00:04.0:
NIC transmit+receive loopback test
intel selftest: pciaddr=0000:00:04.0 secs=1 receive=true loopback=true
Waiting for linkup............ ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:00:04.0:

While it is working in Bern:

selftest: memory
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 8
  Allocating a 2MB HugeTLB: Got 2MB at 0xfb200000
  Allocating a 2MB HugeTLB: Got 2MB at 0xfb400000
  Allocating a 2MB HugeTLB: Got 2MB at 0xfba00000
  Allocating a 2MB HugeTLB: Got 2MB at 0xdb400000
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 8
HugeTLB page allocation OK.
selftest: pci
Scanning PCI devices:
pciaddr         vendor  device  iface   status
0000:00:00.0    0x8086  0x0158  -       -
0000:00:01.0    0x8086  0x0151  -       -
0000:00:02.0    0x8086  0x016a  -       -
0000:00:06.0    0x8086  0x015d  -       -
0000:00:16.0    0x8086  0x1c3a  -       -
0000:00:1a.0    0x8086  0x1c2d  -       -
0000:00:1c.0    0x8086  0x1c10  -       -
0000:00:1c.5    0x8086  0x1c1a  -       -
0000:00:1c.6    0x8086  0x1c1c  -       -
0000:00:1c.7    0x8086  0x1c1e  -       -
0000:00:1d.0    0x8086  0x1c26  -       -
0000:00:1e.0    0x8086  0x244e  -       -
0000:00:1f.0    0x8086  0x1c56  -       -
0000:00:1f.2    0x8086  0x1c02  -       -
0000:00:1f.3    0x8086  0x1c22  -       -
0000:04:00.0    0x8086  0x10d3  eth0    up
0000:05:00.0    0x8086  0x10d3  -       -
0000:06:00.0    0x1b21  0x1042  -       -
Suitable devices: 
  0000:05:00.0
selftest: intel device 0000:05:00.0
NIC transmit test
intel selftest: pciaddr=0000:05:00.0 secs=1
Waiting for linkup.............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:05:00.0:
           1,207,447 GPTC       Good Packets Transmitted Count
          77,277,376 GOTCL      Good Octets Transmitted Count
          77,280,320 TOTL       Total Octets Transmitted (Low)
           1,207,517 TPT        Total Packets Transmitted
           1,207,520 PTC64      Packets Transmitted [64 Bytes] Count
NIC transmit+receive loopback test
intel selftest: pciaddr=0000:05:00.0 secs=1 receive=true loopback=true
Waiting for linkup............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:05:00.0:
             179,933 MPC        Missed Packets Count
             868,259 PRC64      Packets Received [64 Bytes] Count
             868,276 GPRC       Good Packets Received Count
           1,048,224 GPTC       Good Packets Transmitted Count
          55,570,176 GORCL      Good Octets Received Count
          67,087,040 GOTCL      Good Octets Transmitted Count
                  39 RNBC       Receive No Buffers Count
          67,088,960 TORL       Total Octets Received (Low)
          67,089,408 TOTL       Total Octets Transmitted (Low)
           1,048,275 TPR        Total Packets Received
           1,048,280 TPT        Total Packets Transmitted
           1,048,282 PTC64      Packets Transmitted [64 Bytes] Count

Note that I've been running the tests only in arbon till now. So, maybe this issue happens only when running under KVM ?

@rahul-mr
Copy link
Contributor

Update: the issue is now showing up in bern:

selftest: memory
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 10
  Allocating a 2MB HugeTLB: Got 2MB at 0xfb600000
  Allocating a 2MB HugeTLB: Got 2MB at 0xfb800000
  Allocating a 2MB HugeTLB: Got 2MB at 0xdb400000
  Allocating a 2MB HugeTLB: Got 2MB at 0xfba00000
Kernel HugeTLB pages (/proc/sys/vm/nr_hugepages): 10
HugeTLB page allocation OK.
selftest: pci
Scanning PCI devices:
pciaddr         vendor  device  iface   status
0000:00:00.0    0x8086  0x0158  -       -
0000:00:01.0    0x8086  0x0151  -       -
0000:00:02.0    0x8086  0x016a  -       -
0000:00:06.0    0x8086  0x015d  -       -
0000:00:16.0    0x8086  0x1c3a  -       -
0000:00:1a.0    0x8086  0x1c2d  -       -
0000:00:1c.0    0x8086  0x1c10  -       -
0000:00:1c.5    0x8086  0x1c1a  -       -
0000:00:1c.6    0x8086  0x1c1c  -       -
0000:00:1c.7    0x8086  0x1c1e  -       -
0000:00:1d.0    0x8086  0x1c26  -       -
0000:00:1e.0    0x8086  0x244e  -       -
0000:00:1f.0    0x8086  0x1c56  -       -
0000:00:1f.2    0x8086  0x1c02  -       -
0000:00:1f.3    0x8086  0x1c22  -       -
0000:04:00.0    0x8086  0x10d3  eth0    up
0000:05:00.0    0x8086  0x10d3  -       -
0000:06:00.0    0x1b21  0x1042  -       -
Suitable devices: 
  0000:05:00.0
selftest: intel device 0000:05:00.0
NIC transmit test
intel selftest: pciaddr=0000:05:00.0 secs=1
Waiting for linkup.............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:05:00.0:
NIC transmit+receive loopback test
intel selftest: pciaddr=0000:05:00.0 secs=1 receive=true loopback=true
Waiting for linkup.............. ok
Generating traffic for 1 second(s)...
Statistics for PCI device 0000:05:00.0:

@rahul-mr
Copy link
Contributor

Update (on bern):

  1. I have tried using memory.install() to use the memmap-ed address space for the {rx,tx}desc/buffers but still couldn't get the NIC to print statistics.
  2. Tried to bind the pci device (0000:05:00.0) to the e1000e device driver:
# echo -n "0000:05:00.0" > /sys/bus/pci/drivers/e1000e/bind
# dmesg | tail -n 10
[503057.724204] e1000e 0000:05:00.0: Disabling ASPM L0s L1
[503057.724224] e1000e 0000:05:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[503057.724249] e1000e 0000:05:00.0: setting latency timer to 64
[503057.724533] e1000e 0000:05:00.0: irq 56 for MSI/MSI-X
[503057.724540] e1000e 0000:05:00.0: irq 57 for MSI/MSI-X
[503057.724546] e1000e 0000:05:00.0: irq 58 for MSI/MSI-X
[503057.999025] e1000e 0000:05:00.0: eth1: (PCI Express:2.5GT/s:Width x1) 30:85:a9:a3:c5:38
[503057.999030] e1000e 0000:05:00.0: eth1: Intel(R) PRO/1000 Network Connection
[503057.999109] e1000e 0000:05:00.0: eth1: MAC: 3, PHY: 8, PBA No: FFFFFF-0FF
  1. Ran the ethtool on eth1:
root@bern:~# ethtool -t eth1
The test result is FAIL
The test extra info:
Register test  (offline)         0
Eeprom test    (offline)         0
Interrupt test (offline)         0
Loopback test  (offline)         13
Link test   (on/offline)         0

root@bern:~# ethtool -t eth1 online
The test result is PASS
The test extra info:
Register test  (offline)         0
Eeprom test    (offline)         0
Interrupt test (offline)         0
Loopback test  (offline)         0
Link test   (on/offline)         0

  1. Unbind the device:
# echo -n "0000:05:00.0" > /sys/bus/pci/drivers/e1000e/unbind
  1. Ran selftest again and still couldn't get the NIC to print any statistic.

@lukego
Copy link
Member Author

lukego commented Jan 22, 2013

I wonder if there are some new tools we could add to our toolbox for this
situation?

I saw an old LWN article about tracing MMIO operations at the PCI level:
http://lwn.net/Articles/270939/

Could it be that new Linux tracing infrastructure can give us more
visibility into what's going on?

I once had a similar problem while writing a driver for a USB device and
discovered to my delight that tcpdump could record USB traffic (
http://lukego.livejournal.com/22799.html)

On 22 January 2013 10:51, rahul-mr notifications@github.com wrote:

Update (on bern):

  1. I have tried using memory.install() to use the memmap-ed address space
    for the {rx,tx}desc/buffers but still couldn't get the NIC to print
    statistics.
  2. Tried to bind the pci device (0000:05:00.0) to the e1000e device driver:

echo -n "0000:05:00.0" > /sys/bus/pci/drivers/e1000e/bind

dmesg | tail -n 10

[503057.724204] e1000e 0000:05:00.0: Disabling ASPM L0s L1
[503057.724224] e1000e 0000:05:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[503057.724249] e1000e 0000:05:00.0: setting latency timer to 64
[503057.724533] e1000e 0000:05:00.0: irq 56 for MSI/MSI-X
[503057.724540] e1000e 0000:05:00.0: irq 57 for MSI/MSI-X
[503057.724546] e1000e 0000:05:00.0: irq 58 for MSI/MSI-X
[503057.999025] e1000e 0000:05:00.0: eth1: (PCI Express:2.5GT/s:Width x1) 30:85:a9:a3:c5:38
[503057.999030] e1000e 0000:05:00.0: eth1: Intel(R) PRO/1000 Network Connection
[503057.999109] e1000e 0000:05:00.0: eth1: MAC: 3, PHY: 8, PBA No: FFFFFF-0FF

  1. Ran the ethtool on eth1:

root@bern:~# ethtool -t eth1
The test result is FAIL
The test extra info:
Register test (offline) 0
Eeprom test (offline) 0
Interrupt test (offline) 0
Loopback test (offline) 13
Link test (on/offline) 0

root@bern:~# ethtool -t eth1 online
The test result is PASS
The test extra info:
Register test (offline) 0
Eeprom test (offline) 0
Interrupt test (offline) 0
Loopback test (offline) 0
Link test (on/offline) 0

  1. Unbind the device:

echo -n "0000:05:00.0" > /sys/bus/pci/drivers/e1000e/unbind

  1. Ran selftest again and still couldn't get the NIC to print any
    statistic.


Reply to this email directly or view it on GitHubhttps://github.com//issues/39#issuecomment-12537140.

@pkazmier
Copy link
Contributor

Weird, I still don't see it on my machine. I ran the selftest 2,997 times over night and it's still working. Rahul, are you executing a different part of the code than I am? I'm only running the selftest as defined in selftest.lua. I'll leave my loop going all day long while I'm off at work to see if I can get it to happen.

@rahul-mr
Copy link
Contributor

@pkazmier:

Weird, I still don't see it on my machine. I ran the selftest 2,997 times over night and it's still working. Rahul, are you executing a different part of the code than I am? I'm only running the selftest as defined in selftest.lua. I'll leave my loop going all day long while I'm off at work to see if I can get it to happen.

I'm working on issue #33 ATM (branch I'm working on: https://github.com/rahul-mr/snabbswitch/commits/mem_high_issue33 ). The selftest.lua I'm using includes selftest_tso() which ends up calling add_txbuf_tso(). I'm reviewing the code I've written to see if I ended up doing something stupid. Will you be able to test it in your hardware (disclaimer: alpha quality code ;-) ) to see if that triggers this issue? But IIRC the issue got triggered y'day in arbon while running the master branch.

My concern is that whatever triggered the DMA access problem, we should still be able to get the NIC to work without a reboot.

@lukego:

I wonder if there are some new tools we could add to our toolbox for this situation?

Though it isn't much, I've added the definitions of the rx/tx diagnostics registers to help with the debugging.

@lukego
Copy link
Member Author

lukego commented Jan 22, 2013

I have also written some code (uncommitted) to decode the kpageflags file
to see information about physical pages (e.g. does the kernel agree that
they are part of Huge pages, etc). I put this code down for the moment when
it seemed like everything was working :-)

One idea with Arbon: Can we have broken the VM by running something (e.g.
snabbswitch or e1000e bind) on the host? I don't think I have done that
since the last reboot but I can imagine it may mess up the IOMMU trickery
that makes PCIe bypass work.

More tomorrow!

On 22 January 2013 19:29, rahul-mr notifications@github.com wrote:

@pkazmier https://github.com/pkazmier:

Weird, I still don't see it on my machine. I ran the selftest 2,997 times
over night and it's still working. Rahul, are you executing a different
part of the code than I am? I'm only running the selftest as defined in
selftest.lua. I'll leave my loop going all day long while I'm off at work
to see if I can get it to happen.

I'm working on issue #33https://github.com/SnabbCo/snabbswitch/issues/33ATM (branch I'm working on:
https://github.com/rahul-mr/snabbswitch/commits/mem_high_issue33 ). The
selftest.lua I'm using includes selftest_tso() which ends up calling
add_txbuf_tso(). I'm reviewing the code I've written to see if I ended up
doing something stupid. Will you be able to test it in your hardware
(disclaimer: alpha quality code ;-) ) to see if that triggers this issue?
But IIRC the issue got triggered y'day in arbon while running the master
branch.

My concern is that whatever triggered the DMA access problem, we should
still be able to get the NIC to work without a reboot.

@lukego https://github.com/lukego:

I wonder if there are some new tools we could add to our toolbox for this
situation?

Though it isn't much, I've added the definitions of the rx/tx diagnostics
registers to help with the debugging.


Reply to this email directly or view it on GitHubhttps://github.com//issues/39#issuecomment-12558650.

@rahul-mr
Copy link
Contributor

Update:
FWIW segfaults shown in kernel log messages:
Arbon:

$ dmesg | grep -i snabb
[231898.115174] snabbswitch[18548]: segfault at 20200004 ip 000000000043f279 sp 00007fffff752e90 error 4 in snabbswitch[400000+77000]
[276311.218457] snabbswitch[9178]: segfault at 20a65a89 ip 000000000043f279 sp 00007fff568091c0 error 4 in snabbswitch[400000+76000]
[276375.002616] snabbswitch[9245]: segfault at 20865a89 ip 000000000043f279 sp 00007fff367a2a20 error 4 in snabbswitch[400000+76000]

$ addr2line -e src/snabbswitch 000000000043f279
lj_crecord.c:0

Bern:

$ dmesg | grep -i snabb
[ 1220.493591] snabbswitch[2266]: segfault at 0 ip 000000000043f2f1 sp 00007fff359b8100 error 6 in snabbswitch[400000+76000]
[ 1252.896728] snabbswitch[2280]: segfault at 0 ip 000000000043f2f1 sp 00007fffee7b97c0 error 6 in snabbswitch[400000+76000]
[ 1765.469630] snabbswitch[2300]: segfault at 0 ip 000000000043f2f1 sp 00007ffffdc87a40 error 6 in snabbswitch[400000+76000]
[ 1783.146961] snabbswitch[2312]: segfault at 0 ip 000000000043f2f1 sp 00007fff16c8eaa0 error 6 in snabbswitch[400000+76000]
[ 1803.573392] snabbswitch[2324]: segfault at 0 ip 000000000043f2f1 sp 00007fff9c046890 error 6 in snabbswitch[400000+76000]

$ addr2line -e ~/prog/snabbswitch/src/snabbswitch 000000000043f2f1
lj_crecord.c:0

Now I'm using gdb to run snabbswitch (using a debug build of luajit and snabbswitch) - no segfaults yet.

@rahul-mr
Copy link
Contributor

On 01/23/2013 01:10 AM, Luke Gorrie wrote:

I have also written some code (uncommitted) to decode the kpageflags file
to see information about physical pages (e.g. does the kernel agree that
they are part of Huge pages, etc). I put this code down for the moment when
it seemed like everything was working:-)
Interesting!
One idea with Arbon: Can we have broken the VM by running something (e.g.
snabbswitch or e1000e bind) on the host? I don't_think_ I have done that
since the last reboot but I can imagine it may mess up the IOMMU trickery
that makes PCIe bypass work.
Hmm, I've used the e1000e bind only on Bern. But I agree that I/we might
have inadvertently broken the PCI passthrough functionality ;-)

@pkazmier
Copy link
Contributor

Just got home from work, it's still running fine on my machine (5,729 runs now) and no segfaults in my dmesg. Nice find Rahul.

@rahul-mr
Copy link
Contributor

Just got home from work, it's still running fine on my machine (5,729 runs now) and no segfaults in my dmesg. Nice find Rahul.

Thanks, Pete :-)

BTW did you find any significant change in the MPC (Missed Packets Count) and RNBC (Receive No Buffers Count) in the NIC transmit+receive loopback test with the current master?

@pkazmier
Copy link
Contributor

The MPC and RNBC counts are roughly 700,000 and 22,000 respectively. I don't run the current master as it doesn't support my NIC, but other than a few changes for PHY access, it's more or less the same. Because I recently got this working, I have no other baseline to make comparisons as to whether or not there were significant differences in results.

Need to head out for a bit. Good luck!

@rahul-mr
Copy link
Contributor

Update: I would like to start with an apology - it seems the issue is triggered only when I run add_txbuf_tso. So the earlier report that the issue was triggered with the @snabbco master branch seems to be incorrect (It seems I may have mixed up branches while testing. To avoid the possibility of mixing up branches and getting incorrect findings, from now onwards I'll make a fresh git clone of @snabbco snabbswitch master and test with that). sorry for the incorrect findings :-(

Now on to the good news: The issue is not in accessing DMA memory, but the reset function doesn't set the GIO Master Disable bit (of CTRL register) and wait for GIO Master Enable Status bit to be cleared (in STATUS register).

This is the updated reset():

  function reset ()
      regs[IMC] = 0xffffffff                 -- Disable interrupts
      regs[CTRL] = bit.bor(regs[CTRL], bits({GMD=2})) -- GIO Master Disable
      --local deadline = C.get_time_ns() + 
      C.usleep(10)
      assert( not bitset(regs[STATUS], 19) ) -- GIO Master Enable Status 
      regs[CTRL] = bits({FD=0,SLU=6,RST=26,PHY_RST=31}) -- Global reset
      C.usleep(10); assert( not bitset(regs[CTRL],26) )
      regs[IMC] = 0xffffffff                 -- Disable interrupts
   end

Now the add_txbuf_tso works as expected (multiple runs without any errors) :-)

waiting for packet transmission...
Statistics for PCI device 0000:05:00.0:
                   1 GPTC       Good Packets Transmitted Count
                  64 GOTCL      Good Octets Transmitted Count
                  64 TOTL       Total Octets Transmitted (Low)
                   1 TPT        Total Packets Transmitted
                   1 PTC64      Packets Transmitted [64 Bytes] Count
size    mss     txtcp   txeth   txhw
4       1500    1       1       1

So one possible explanation for the previously observed behaviour is that since a Device Reset (RST) will not clear the NIC's internal Packet Buffer Allocation register (and possibly other undocumented internal registers?) and since we haven't issued a GIO Master Disable, the NIC will not clear all the pending requests (Page 35, Page 295 of 82574L DS)

Edit: 82574L not 83574L ; grammar fix

@rahul-mr
Copy link
Contributor

Update: A new issue has cropped up now: assert( not bitset(regs[STATUS], 19) ) fails sometimes. Investigating...

Update2: It seems calling M.init() at the end of selftest_tso() fixes the assertion issue.

Update3: Page63 of DS - types of reset

@rahul-mr
Copy link
Contributor

Update: the following reset() seems to work:

   function reset ()
      regs[IMC] = 0xffffffff                 -- Disable interrupts
      regs[CTRL] = bit.bor(regs[CTRL], bits({GMD=2})) -- Set GIO Master Disable
      C.usleep(1000) -- wait 1ms to clear all pending requests
      print("DBG: reset: GIO Master Enable Status: "..tostring(bitset(regs[STATUS], 19)) ) --GIO Master Enable Status 
      regs[CTRL] = bits({FD=0,SLU=6,RST=26,PHY_RST=31}) -- Global reset [ will (hopefully!) clear GIO Master Disable ]
      C.usleep(10); assert( not bitset(regs[CTRL],26) )
      regs[IMC] = 0xffffffff                 -- Disable interrupts
   end

@pkazmier
Copy link
Contributor

Hi Rahul, where did you find the recommendation to disable the GIO master? I'm trying to learn what this is as its not documented well in my DS (or more likely I don't understand what's going on). How was this causing the issue? I assume I'll need to add to my code as well, but I'm not having any issues so I'm unsure what this is doing. Is this related to enabling bus mastering in init_pci?

@rahul-mr
Copy link
Contributor

Hi Rahul, where did you find the recommendation to disable the GIO master? I'm trying to learn what this is as its not documented well in my DS (or more likely I don't understand what's going on). How was this causing the issue? I assume I'll need to add to my code as well, but I'm not having any issues so I'm unsure what this is doing. Is this related to enabling bus mastering in init_pci?

Hi Pete, as mentioned in an earlier post, please check: Page 295 and Page 35 of 82574L DS

@pkazmier
Copy link
Contributor

Thanks! I completely missed that last paragraph in that post! I think I was too focused on the code. I'll read up and if I have any more questions I'll ask later.

@rahul-mr
Copy link
Contributor

On 01/25/2013 07:40 AM, pkazmier wrote:

Thanks! I completely missed that last paragraph in that post! I think I was too focused on the code. I'll read up and if I have any more questions I'll ask later.
No worries ! :-)

@pkazmier
Copy link
Contributor

To cross check, I went through the code for the igb and e1000e linux drivers. Guess what is the very first thing they do in their reset functions - disable master polling (see the comment about sticking). The igb_disable_pcie_master function below sets the CTRL.GMB bit, so it looks like you nailed this! I notice they set this prior to masking the interrupts, should we do the same?

static s32 igb_reset_hw_82575(struct e1000_hw *hw)
{
    u32 ctrl, icr;
    s32 ret_val;

    /*
     * Prevent the PCI-E bus from sticking if there is no TLP connection
     * on the last TLP read/write transaction when MAC is reset.
     */
    ret_val = igb_disable_pcie_master(hw);
    if (ret_val)
        hw_dbg("PCI-E Master disable polling has failed.\n");

    /* set the completion timeout for interface */
    ret_val = igb_set_pcie_completion_timeout(hw);
    if (ret_val) {
        hw_dbg("PCI-E Set completion timeout has failed.\n");
    }

    hw_dbg("Masking off all interrupts\n");
    wr32(E1000_IMC, 0xffffffff);
...

@rahul-mr
Copy link
Contributor

On 01/25/2013 08:10 AM, pkazmier wrote:

To cross check, I went through the code for the igb and e1000e linux drivers. Guess what is the very first thing they do in their reset functions - disable master polling (see the comment about sticking). The igb_disable_pcie_master function below sets the CTRL.GMB bit, so it looks like you nailed this! I notice they set this prior to masking the interrupts, should we do the same?
Page 78 of 82574L DS says:

4.6.1  Interrupts During Initialization
Most drivers disable interrupts during initialization to prevent 
re-entrancy. Interrupts
are disabled by writing to the IMC register. Note that the interrupts 
need to be disabled
also after issuing a global reset, so a typical driver initialization 
flow is:
1. Disable interrupts
2. Issue a global reset
3. Disable interrupts (again)
4. …
After the initialization completes, a typical driver enables the desired 
interrupts by
writing to the IMS register.

I think the way we are doing it is safe :-)

@rahul-mr
Copy link
Contributor

Update: In addition to the updated reset(), it seems it is important to do the following (in selftest_tso()) to avoid NIC lockups:

print "waiting for old traffic to die out ..."
--C.usleep(100000) -- Wait for old traffic from previous tests to die out

regs[CTRL] = bit.bor(regs[CTRL], bits({GMD=2})) -- Set GIO Master Disable
C.usleep(10000) -- wait 10ms
print("DBG: selftest_tso: GIO Master Enable Status: "..tostring(bitset(regs[STATUS], 19)) ) --GIO Master Enable Status
regs[CTRL] = bit.band(regs[CTRL], bit.bnot(bits({GMD=2})) ) -- Clear GIO Master Disable

@rahul-mr
Copy link
Contributor

Update: This is the current setup that seems to work (for multiple runs):

   local function clear_rx()
      rdt = 0
      regs[RDT] = 0
      regs[RDH] = 0
   end M.clear_rx = clear_rx

   local function clear_tx()
      tdt = 0
      regs[TDT] = 0
      regs[TDH] = 0
   end M.clear_tx = clear_tx

  function M.selftest_tso (options):

      -- blah blah blah

      print "waiting for old traffic to die out ..."

      regs[CTRL] = bit.bor(regs[CTRL], bits({GMD=2})) -- Set GIO Master Disable
      C.usleep(10000) -- wait 10ms
      print("DBG: selftest_tso: GIO Master Enable Status: "..tostring(bitset(regs[STATUS], 19)) ) --GIO Master Enable Status
      regs[CTRL] = bit.band(regs[CTRL], bit.bnot(bits({GMD=2})) ) -- Clear GIO Master Disable

      --  blah blah blah

      print "waiting for packet transmission..."
      C.usleep(1000000) -- wait for 1s transmit
      M.clear_tx()
      C.usleep(1000) -- wait for 1 ms
      M.clear_rx()
      C.usleep(1000) -- wait for 1 ms

      -- blah blah blah

      regs[CTRL] = bit.bor(regs[CTRL], bits({GMD=2})) -- Set GIO Master Disable
      C.usleep(1000) -- wait 1ms
      print("DBG: selftest_tso: GIO Master Enable Status: "..tostring(bitset(regs[STATUS], 19)) ) --GIO Master Enable Status
      regs[CTRL] = bit.band(regs[CTRL], bit.bnot(bits({GMD=2})) ) -- Clear GIO Master Disable

  end

@lukego
Copy link
Member Author

lukego commented Jan 25, 2013

arbon-VM seems in the DMA-stuck state. Do you know a "cure" for this that doesn't require a reboot? I tried a replacement reset() above and your @rahul-mr/issue33 branch but can't get the counters moving.

@rahul-mr
Copy link
Contributor

On 01/25/2013 01:45 PM, Luke Gorrie wrote:

arbon-VM seems in the DMA-stuck state. Do you know a "cure" for this that doesn't require a reboot? I tried a replacement reset() above and your @rahul-mr/issue33 branch but can't get the counters moving.

As far as I can see, the reset() doesn't bring the NIC out of its
locked-up state - only a hardware reboot works once the NIC enters the
locked-up state (the PCIe master disable/enable can prevent but not
cure).

I'm thinking of trying to directly write to the PCIe Power Management
Control/Status Register (PMCSR) [page 266, 82574L DS] to do a D0 -> D3
-> D0 power state transition and see if that helps.

@rahul-mr
Copy link
Contributor

I'm thinking of trying to directly write to the PCIe Power Management Control/Status Register (PMCSR) [page 266, 82574L DS] to do a D0 -> D3 -> D0 power state transition and see if that helps.

Tried it - doesn't seem to fix the problem. arbon needs a reboot.

@lukego
Copy link
Member Author

lukego commented Jan 28, 2013

I did a reboot on arbon.

Here's the procedure I use after reboot to get the devel VM back up, in
case you want to do it yourself any time:

echo 0000:05:00.0 > /sys/bus/pci/devices/0000\:05\:00.0/driver/unbind
screen -S kvm # create a stable screen session
/root/kvm.sh

On 27 January 2013 12:44, rahul-mr notifications@github.com wrote:

I'm thinking of trying to directly write to the PCIe Power Management
Control/Status Register (PMCSR) [page 266, 82574L DS] to do a D0 -> D3 ->
D0 power state transition and see if that helps.

Tried it - doesn't seem to fix the problem. arbon needs a reboot.


Reply to this email directly or view it on GitHubhttps://github.com//issues/39#issuecomment-12753040.

@rahul-mr
Copy link
Contributor

I did a reboot on arbon.

Here's the procedure I use after reboot to get the devel VM back up, in case you want to do it yourself any time:

Thanks, Luke :-)

@lukego
Copy link
Member Author

lukego commented May 5, 2013

I believe this was an issue with truncating 64-bit pointers to 32-bits so that we would give mangled pointers to the NIC.

@lukego lukego closed this as completed May 5, 2013
dpino pushed a commit to dpino/snabb that referenced this issue Sep 29, 2015
lukego added a commit to lukego/snabb that referenced this issue Jul 6, 2017
README: Declared CPU & Optimization policy
eugeneia added a commit to eugeneia/snabb that referenced this issue Jun 5, 2018
eugeneia added a commit to eugeneia/snabb that referenced this issue Sep 6, 2023
54cc2a1b4 Merge PR snabbco#260 (clear hotcounts every second) into next
4cbeb1e39 lj_trace.c: amend prev. commit, do not clear SNAPCOUNT_DONE
8f36d5183 lj_trace.c: amend prev. commit, also clear trace exit hotcounts
77df770fb lj_trace.c: clear all hotcounts every second
73323b7c6 Merge pull request snabbco#246 from lukego/fix-unsinking
59fc1b06d lj_snap.c: Fix unsinking of 64-bit pointers
65ef4f455 testsuite: Add (segfaulting) test for allocation unsinking
32b08479a Merge pull request snabbco#243 from ZirconiumX/force_gc64
7954fd345 Remove LJ_LE #define
ae45cbe4e Remove LJ_BE #define
4f3dc17e9 Re-bootstrap the VM
190356e92 Prune dead code
dcd87f025 Remove LJ_HASFFI #define
2a343ef9f Remove LJ_32 #define
41b290d44 Remove LJ_64 #define
de0c96014 Remove LJ_GC64 #define
ff23fc588 Merge pull request snabbco#241 from ZirconiumX/use_sysmalloc
b060b48c6 Remove built-in dlmalloc
7a6b899f4 Merge pull request snabbco#226 from lukego/compare_hash
c5a7d2318 Merge LuaJIT/LuaJIT#243 branch 'funny-falcon/compare_hash'
bfc3b47d4 Merge pull request snabbco#221 from lukego/basic-install-test
8a80855c4 etc/raptorjit.pc: Replace s/LuaJIT/RaptorJIT/
e96e0ecdb Merge snabbco#220 branch 'lazara5/pkgconfig' into basic-install-test
72decefa5 raptorjit.nix: Check for installation of lib/pkgconfig/raptorjit.pc
33d88ea39 raptorjit.nix: Check installation of bin/raptorjit and lib/raptorjit-5.1.so
9b13bd3c3 Added back pkg-config file
f2e3705e6 Merge pull request snabbco#218 from lukego/test-libraptorjit
78d168f95 Merge pull request snabbco#217 from lukego/dwarf-not-so
5c72a3cf9 Merge snabbco#217 branch 'dwarf-not-so' into test-libraptorjit
fcdc3c61f fixup! test-libraptorjit.nix: Added test for dynamic linking libraptorjit
2a5d6fb3f .travis.yml: Add test-libraptorjit
5be341e2c test-libraptorjit.nix: Added test for dynamic linking libraptorjit
b9d801b15 src/Makefile: Fix unwanted dynamic linkage of dwarf debug info
16930c36c Merge pull request snabbco#212 from lukego/test-capi
ae0525c0d Merge pull request snabbco#209 from lukego/c-api-linkage
5af79e149 Merge branch 'c-api-linkage' into test-capi
4e9162ff3 .travis.yml: Add test-capi
bd959e359 test-capi.nix: Add basic of C-API linkage
63d415811 src/Makefile: Add -Wl,-E to make Lua API symbols visible to linked objects
572090d8d Merge pull request snabbco#200 from lukego/commercial-support
7f812f9e2 Added PROFESSIONAL-SUPPORT.md list of service providers
61c3a36b1 Merge snabbco#195 branch 'bonidjukic/update-docs'
2d386f69c Merge pull request snabbco#197 from 0xflotus/patch-1
2528860b3 fixed Quantitative
723210655 Fix README typos
31d41be Merge pull request snabbco#193 from lukego/prepare-release-1.0
56a88b2 Prepare for RaptorJIT 1.0 with installation fixes
d44450e Merge pull request snabbco#192 from lukego/log-ctype-assert
fc0c107 Merge pull request snabbco#191 from lukego/memory-leak-protection
55e7656 lj_ctype.c: Detect bad ctypeid without failing lua_assert
3b80633 lj_state.c: Restore assertion that all memory is deallocated
a667ead Fix deallocation of T->szirmcode
2a7990a Merge pull request snabbco#189 from lukego/nix-build-options
d3c149d default.nix: Test with -DLUA_USE_ASSERT and -Werror
52e2977 Merge pull request snabbco#186 from lukego/fix-jit-traces-alloc
d09927b lj_trace.c: Fix and simplify allocation of J->trace
5d235e6 Merge pull request snabbco#184 from lukego/ctype-no-loop
3f9db9e lj_ctype.c: Detect loops in ctype_repr()
9fac632 Merge pull request snabbco#183 from lukego/szirmcode-alloc-free
9959cb1 lj_asm.c: Added comment about szirmcode moving to final GCtrace
66f9234 lj_trace_alloc: Copy T->szirmcode to new trace
4782265 Fix allocation/deallocation of T->szirmcode
9056918 Merge pull request snabbco#182 from lukego/readme-vmprofile-filename
fcf138f README.md: Correct profile names to *.vmprofile (expected by studio)
5171334 Merge pull request snabbco#179 from lukego/readme-studio
4e1405d README.md: Add quick Studio getting started intro
f29bc2a Merge pull request snabbco#178 from lukego/readme-update
4891901 README.md: revised ahead of first release
5d7d873 Merge pull request snabbco#50 from lukego/Werror
0494515 Merge pull request snabbco#177 from lukego/rebrand-printouts
d4a392a Merge branch 'master' into Werror
420fa75 Minimal rebranding from LuaJIT -> RaptorJIT
48b2be9 Merge pull request snabbco#63 from lukego/auditlog
7e74425 Merge branch 'raptorjit/master' into auditlog
53eb6ae Merge branch 'master' into auditlog
a4f36d3 Merge pull request snabbco#176 from lukego/switch-sigprof-to-sigvtalrm
d38be0e Merge pull request snabbco#175 from lukego/vmprofile-exit-exclude-function-trace
ca0abe3 reusevm: Update generated code
6b72001 Use virtual instead of profile time for vmprofile
2c5faa8 Exclude function-rooted traces from global_State->lasttrace
cd172fc lj_parse.c: Set declname for file-level code to <toplevel>
473cb19 lj_ctype.c: Avoid crash when printing unprintable ctype IDs
90a15f7 lj_ctype.c, lj_trace.c: Poll for ctypes to log on trace stop/abort
9abd48a Merge pull request snabbco#168 from lukego/declname
0a588b4 Merge branch 'declname' into auditlog
96e00a6 lj_bcwrite.c: Remove unused variable
c552236 Restore older debug info fields to their original positions
d60c595 lj_prase.c: Remove old debug noise
c8b1388 Merge branch 'declname' into auditlog
8f55c03 src/reusevm: Update generated code
01f8b4c lj_bcread.c: Remove suspicious loop
73b96a4 src/reusevm: Update generated code
74b52e6 lj_bcread.c: Remove suspicious loop
4166e7a lj_bcdump.h: Bump bytecode version number (2 -> 3)
6395811 Merge branch 'declname' into auditlog
8d9d959 Extend GCproto debug with declared function name (declname)
f58daf9 Merge pull request snabbco#163 from lukego/readme-linux
9a798d7 luajit.c: Fix argument parsing bug that made "-a" fall into "-p"
92955dc src/Makefile: Add dependency from DWARF info to generated headers
a5222e7 lj_state.c: Partial fix of assertion on shutdown
1646db3 lj_audit.log.c: Fix iteration through trace constants
fe5f37d Merge branch 'master' into auditlog
e51eaa1 lj_debuginfo.h: Add missing file declaring dwarf data
229fc15 lj_auditlog.c: Log raptorjit VM DWARF debug information to audit.log
02062e9 src/Makefile: Embed DWARF debug info as binary blob
9b5ab0a lj_dwarf.c: Add lj_ircall.h and lj_ff.h for more debug information
f62c246 fixup! lj_asm.c: Fix szirmcode values
8c8731e lj_asm.c: Fix szirmcode values
d64a769 fixup! lj_auditlog.c: Log GCtrace->irmcodesz (IR-mcode mapping)
44fbf8e lj_auditlog.c: Log GCtrace->irmcodesz (IR-mcode mapping)
1d1dc9f README.md: State more clearly that Linux is required
9fb87d1 Merge pull request snabbco#162 from lukego/nix-shell
db4b5e7 Merge pull request snabbco#160 from Igalia/remove-profiler
b93738f shell.nix: Make 'nix-shell' command work as documented
486f720 lj_auditlog.c: Log GCfunc objects referenced by IR constants
1c81d51 fixup! lj_auditlog.c, lj_ctype.c: Log named ctypes to the audit log
d0191fe lj_auditlog.c, lj_ctype.c: Log named ctypes to the audit log
10764c4 lj_auditlog.c: Log strings referenced as IR constants
b0cbca7 lj_auditlog.c: Add "nanotime" timestamp to events
d0dcc75 lj_audit.log.c: Add file size limit (default 100MB)
0158240 luajit.c: Make -a and -p argument handling more consistent
8119e5d Remove references to the profiler, -jv, -jdump, and the like
cad220d lj_trace.c, lj_auditlog.c: Log auditlog event "trace_flushall"
c6347dc lj_trace.c: Clear profiler lasttrace state on flushall()
7b57a23 lj_trace.c: Allow reuse of trace numbers after jit.flush()
9be90a3 lj_jit.h: Increase default maxtrace from 1000 to 10000
389cc39 Merge remote-tracking branch 'raptorjit/master' into auditlog
8b04cd7 Merge pull request snabbco#154 from darius/master
559113a correct spelling
7484d99 Merge pull request snabbco#153 from lukego/pull-luajit-jan2018
42bb70b lj_ir.h: Fix typo made when resolving merge conflict
a8f76e5 Merge commit '4660dbf' into pull-luajit-jan2018
1a0be2e Merge commit '58d0dde' into pull-luajit-jan2018
2ff6099 Merge commit 'ea7071d' into pull-luajit-jan2018
e3e3c80 Merge commit 'd417ded' into pull-luajit-jan2018
836ba21 Merge commit '734a3fa' into pull-luajit-jan2018
653d48a Merge commit '33082a6' into pull-luajit-jan2018
7f812ff Merge commit '99cdfbf' into pull-luajit-jan2018
1753d8b Merge commit '06cd9fc' into pull-luajit-jan2018
5a6457d Merge commit '4b17a6a' into pull-luajit-jan2018
e525ef9 Merge commit '850f8c5' into pull-luajit-jan2018
0dbdc24 Merge commit 'b4ed321' into pull-luajit-jan2018
98027c8 Merge commit '6a2d8b0' into pull-luajit-jan2018
45b5028 Merge commit 'bf12f1d' into pull-luajit-jan2018
f4fbf81 Merge commit '05fbdf5' into pull-luajit-jan2018
8afd558 Merge commit '71b7bc8' into pull-luajit-jan2018
7f41f14 Merge commit '6b08248' into pull-luajit-jan2018
844ab86 Merge commit '9634fa9' into pull-luajit-jan2018
d98e699 Merge commit 'f3d7507' into pull-luajit-jan2018
91dbe23 Merge branch 'master' into v2.1
f6c52a3 Merge branch 'master' into v2.1
97356f9 Use https for freelists.org links.
e74afb9 Merge remote-tracking branch 'raptorjit/master' into auditlog
9175f10 Merge pull request snabbco#152 from lukego/gcc
4189da6 Just use the default gcc instead of clang 4.0.0.
b8204d9 Merge pull request snabbco#144 from lukego/simplify-lineinfo
eabe1de Merge branch 'raptorjit/master' into auditlog
6999d05 Merge pull request snabbco#147 from lukego/vmprofile-oneliner
e92c500 lj_vmprofile.c: Fix bug where restarting the timer would not work
44bd7a5 Merge branch 'raptorjit/master' into auditlog
9de778c Merge pull request snabbco#150 from lukego/reoptimize-string-intern
4660dbf Merge branch 'master' into v2.1
430d9f8 Fix string.format("%c", 0).
58d0dde Fix IR_BUFPUT assembly.
fcf86b8 lj_str.c: Remove special-case string interning fastpath
b53a438 Merge pull request snabbco#149 from lukego/benchmarks-fix-awk
f66fc04 testsuite/bench: Fix awk parsing of perf output
ed21034 auditlog: Log source (lex events) as msgpack binary
9dac90f auditlog: Log source code (in chunks via lexer events)
8406438 Merge branch 'vmprofile-oneliner' into auditlog
c3b59a7 Merge branch 'raptorjit/master' into auditlog
fd0e49d Support "one-liner" usage of jit.vmprofile.open()
02d596c Merge pull request snabbco#146 from lukego/vmprofile-cmdline
7844c5f Add '-p file' command line syntax for VMProfile
b2be223 Merge pull request snabbco#145 from lukego/fix-warning-and-reusevm
1fa5375 Fix compiler warning & reusevm generated code
de0f442 fixup! auditlog: Can only be opened once now (error on second open)
541d60d auditlog: Can only be opened once now (error on second open)
864a100 Merge branch 'simplify-lineinfo' into auditlog
b5056fa lj_parse.c, lj_debug.c: Remove clever tricks in lineinfo encoding
3a5aa7d lj_trace.c: Do not reuse trace numbers after flush
0b940c5 lj_auditlog.c: Glibc memory stream workaround...
623d45f lj_auditlog.c: Remove fflush() that seems problematic
2276cd8 lj_trace.c: Fix compiler warnings
588e9c3 lj_auditlog.c: Fix compiler warning
3e2d4e4 lj_auditlog.c: Use open_memstream() instead of fmemopen()
a63b5d9 Merge branch 'master' into auditlog
8f94abb Merge pull request snabbco#142 from lukego/integrate-dec2017
b83e78d Merge snabbco#141 branch 'replace-gcref-mref' into integrate
9df1238 Merge snabbco#133 branch 'fix-alloc' into integrate
6d9b473 Merge snabbco#140 branch 'vmprofile-v4' into integrate
5cf2076 Merge snabbco#120 branch 'record-blacklisted-functions' into integrate
0a33b43 Merge snabbco#101 branch 'long-running-stable' into integrate
4fafb32 Merge snabbco#98 branch 'lukego/szirmcode' into integrate
520c6d3 Merge snabbco#86 branch 'ffi-pointer-difference-div' into integrate
5454da8 Merge snabbco#79 branch 'unused-bench-param' into integrate
34f24ae Merge snabbco#81 branch 'gctrace-origin' into integrate
7e34e72 reusevm: Update generated code
07fef11 luajit.c: Add 'raptorjit -a <path> ...' command line auditlog syntax
671d770 lib_jit.c: Add 'jit.auditlog(filename)' Lua API function
857073c lj_auditlog.c: Add lj_auditlog_open(path) API function
7b9840d Merge branch 'replace-gcref-mref' into auditlog
1587377 lj_obj.h: Redefine MRef as simple void* pointer
2f5a9a3 lj_obj.h: Redefine GCRef as simple GCobj* pointer
88cc35c reusevm: update generated code
5843c53 lj_auditlog.c: Log prototype names (GCstr)
4d8b3eb auditlog: Log all loaded bytecode (GCproto objects)
b46e33a Merge branch 'fix-alloc' (incl. master) into auditlog
43691e0 reusevm: Update generated code
ad02215 Merge branch 'raptorjit/master' into fix-alloc
14120c1 Merge pull request snabbco#127 from lukego/lineinfo-no-compress
77dabca Merge pull request snabbco#132 from lukego/jit-log-bytecodes
964585e Merge pull request snabbco#134 from lukego/flush-clear-blacklist
796597d lj_trace.c: unpatch blacklisted bytecodes when flushing traces
06b9f32 lj_state.c: Fix allocation and free of IR buffer
d371db6 lj_state.c: Fix dealloc to match
bc57ceb lj_state.c: Fix bug in allocation of IR buffer
b29101e fixup! lj_auditlog: Improve logging of trace stop/abort
238c698 lj_auditlog: Improve logging of trace stop/abort
fdf39d8 Merge branch 'jit-log-bytecodes' into auditlog
9b2b467 Minor update to jit_State bytecode log
7a4e25b Add log of recorded bytecodes (BCLogRec) to jit_State
783cf2d Merge pull request snabbco#131 from lukego/jit-state-static-tmp-buffers
16121f2 Statically allocate JIT temp buffers
862727f Merge branch 'vmprofile-interp' into auditlog
a8b0f32 lj_vmprofile.c: Add assertions with lua_assert
0823d96 lj_vmprofile.c: Fix trace number overflow (into bucket 0)
ae5c6aa vm_x64.dasc: Fixes to ensure g.lasttrace is a trace number
ef08db2 Merge VMProfile 4.0 from branch 'vmprofile-interp' into auditlog
c1659d9 VMProfile 4.0: File format revision
17b3c9c lj_bcread.c: Fix warning
7f4787a Fix bug in lj_bcread_proto()
5e673ea lj_obj.h: Fix comment about lineinfo (non)compression
c734910 Remove feature to compress GCproto.lineinfo
5a3a889 Merge branch 'vmprofile-interp' into auditlog
5cac382 lj_vmprofile.c: Fix file header initialization
ea7071d MIPS64: Fix xpcall() error case.
d417ded ARM64: Fix xpcall() error case (really).
2b89796 vmprofile 3.0 with more information
bd7266d Track last exited trace (lasttrace) in global_State
089c55a lj_obj.h: Explicitly define implicit VM states
734a3fa Merge branch 'master' into v2.1
7dbf0b0 Fix saved bytecode encapsulated in ELF objects.
33082a6 ARM64: Fix xpcall() error case.
39680ca Merge pull request snabbco#123 from lukego/no-exitstate-pcreg
b6902f8 Remove EXITSTATE_PCREG
99cdfbf MIPS64: Fix register allocation in assembly of HREF.
06cd9fc ARM64: Fix assembly of HREFK.
4b17a6a Merge branch 'master' into v2.1
9f0caad Fix FOLD rule for strength reduction of widening.
f5d810e lj_record.c: Record IFUNC/IFUNCV the same as FUNC/FUNCV
c83fd4c Merge pull request snabbco#116 from lukego/jit-tracebarrier
0be85c6 src/reusevm: update generated files
e182ae8 Add jit.tracebarrier() primitive
850f8c5 LJ_GC64: Make ASMREF_L references 64 bit.
b4ed321 LJ_GC64: Fix ir_khash for non-string GCobj.
6a2d8b0 Merge branch 'master' into v2.1
0c0e7b1 DynASM/x86: Fix potential REL_A overflow.
bf12f1d MIPS64: Hide internal function.
05fbdf5 x64/LJ_GC64: Fix type-check-only variant of SLOAD.
ce6fbb4 lj_record.c: Relax heuristic for root trace meeting JIT loop
a720595 lj_trace.c: Reset hotcount table after flush
01dc844 lj_jit.h: Increase HOTCOUNT_MAX and expand HotPenalty.val
f7212cc lj_trace.c: Clear penalty slot after successful trace
c5923d8 lj_auditlog.c: Log VM definition information
71b7bc8 PPC: Add soft-float support to JIT compiler backend.
e4a76f8 Merge snabbco#98 branch 'szirmcode' into auditlog
ad14f45 GCtrace: Make it possible to map between IR and mcode insns
d400946 Merge pull request snabbco#94 from CapsAdmin/master
fabab00 x64/LJ_GC64: Fix asm_fuseloadk64()
6b08248 x64/LJ_GC64: Fix fallback case of asm_fuseloadk64().
59a3e9f Merge pull request snabbco#90 from lukego/reusevm-toplevel
53e93f1 Merge pull request snabbco#89 from lukego/readme-redux
86f23d6 README: Re-introduce goal of minimizing non-deterministic performance
1b5c2f2 fixup! README: Added note about future platform support
cc5668b README: Added note about future platform support
bebdbac Makefile: Added reusevm target at top-level
7c2a11e fixup! README: shorten intro, move Optimization Resources down
9ab33a8 README: shorten intro, move Optimization Resources down
2bc2d95 README: Make less fuss about Intel Core
88bcf00 README.md: New introduction
9634fa9 Merge branch 'master' into v2.1
f3d7507 Use https for freelists.org links.
46f00a4 Merge pull request snabbco#88 from lukego/pull-luajit
00e983c src/reusevm: update generated files
4cd536f testsuite: Enable Lua 5.2 compat
4e945d2 lj_api.c: Fix breakage in cherry-pick of ffd2610
340f702 Merge *history only* from branch 'luajit/v2.1' commit fd37da0 into pull-luajit
c0165a6 x64/LJ_GC64: Fix emit_rma().
e2cabaf Remove unused define.
07918dc Merge branch 'master' into v2.1
a0a1983 Merge branch 'master' into v2.1
a698e89 FFI: Update docs on compiler limitations.
e091baf Add FOLD rules for mixed BAND/BOR with constants.
2f7f0a2 FFI: Compile bitfield loads/stores.
bddc781 Document added C API extensions from Lua 5.2/5.3.
ffd2610 From Lua 5.2: Add lua_tonumberx() and lua_tointegerx().
9fabcf9 From Lua 5.2: Add luaL_setmetatable().
4a307c1 From Lua 5.2: Add luaL_testudata().
9a520cb From Lua 5.3: Add lua_isyieldable().
f1264bf From Lua 5.2: Add lua_copy().
eaf262d From Lua 5.2: Add lua_version().
b28c891 Refactor with LUA_OK.
d6db005 Add some more changes and extensions from Lua 5.2.
dbe5619 Remove old Lua 5.0 compatibility defines.
e834e9c Merge branch 'master' into v2.1
de9a886 x64/LJ_GC64: Fix emit_loadk64().
5126a06 LJ_GC64: Fix BC_CALLM snapshot handling.
07f976a Remove Lua 5.0 compatibility defines.
cf655d9 lj_crecord.c: JIT pointer difference for all element sizes
48be218 Merge branch 'unique-trace-numbers' into auditlog
4b4dcb0 lj_trace.c: Make trace numbers unique (stop reusing them)
a292144 Merge branch 'vmprofile' into auditlog
4a06d4a lj_vmprofile.c: Fixed to set file magic number with C API calls
8fc672c Merge branch 'gctrace-origin' into auditlog
fcf7053 check-generated-code.nix: Add more verbosity
4aaa844 lj_jit.h: Save 'parent' and 'exitno' fields in GCtrace
5708b06 Merge pull request snabbco#80 from lukego/fix-build
300d14e reusevm: Updated generated code
d27d4d4 check-generated-code.nix: Tweak order of diff args
076d161 check-generated-code.nix: Fixed
8ec77f9 .travis.yml: Update Travis-CI config (was not testing)
d095eae raptorjit.nix: Fix executable name / broken build
f8d1c9e Merge branch 'raptorjit/master' into auditlog
eaf418c Merge pull request snabbco#77 from lukego/vmprofile
d7fd44e testsuite/bench: Remove PARAM_* for unsupported platforms
8cd8f7e vmprofile: Extend Lua API and add test cases
fd37da0 PPC: Add soft-float support to interpreter.
7e662e4 x64/LJ_GC64: Fix emit_rma().
89407be Merge snabbco#64 branch 'lukego/dwarf' into auditlog
a68c8d2 Merge pull request snabbco#37 from lukego/cleanup
8ca5612 Merge pull request snabbco#66 from lukego/vmprofile
f8bd4d8 Merge pull request snabbco#59 from lukego/nix-benchmarks
66fab90 Merge branch 'master' into nix-benchmarks
67864a9 Merge pull request snabbco#70 from lukego/split-build
c297923 Makefile: New 'reusevm' target & bootstrap-skipping method
9fe3967 .travis.yml: Include check-generated-code test
2cf9924 check-generated-code.nix: Check if in-tree VM code is stale
726cc9c raptorjit.nix: preBuild = 'make bootstrapclean'
964cbe4 Makefile: New target 'bootstrapclean' removes in-tree generated code
3ca3df8 README: Update build procedure description
196a9e2 Makefile: s/LuaJIT 2.1.0-beta2/RaptorJIT 1.0.0-alpha1/
086b4c9 Exclude generated code from .gitignore
6d7a8d2 Add VM generated code to the repository
45c2d44 Merge pull request snabbco#69 from lukego/simplify-makefile
f9d7cdd src/Makefile: Shrink by removing obsolete platform logic
65675f5 lj_vmprofile: Port & adapt revisions
24f82aa Merge branch 'lukego-luajit/vmprofile' into vmprofile
0acc230 lj_auditlog: Log the memory containing IR instructions
cf2dfaf Merge branch 'master' into v2.1
82151a4 Modify fix for warning from 'ar'.
6a71e71 Remove unused define.
b0ecc6d FreeBSD/x64: Avoid changing resource limits, if not needed.
a057a07 MIPS64: Add soft-float support to JIT compiler backend.
0e4a551 Merge branch 'master' into v2.1
c7c3c4d MIPS: Fix handling of spare long-range jump slots.
79fe578 Merge branch 'master' into v2.1
7381b62 MIPS: Use precise search for exit jump patching.
0a55469 Generate separate DWARF debug info
376fb58 lj_trace: Log trace aborts to auditlog
2dfdb73 lj_auditlog: Implement logging of trace_abort
b302c6e lj_auditlog: Add "event" object
76be283 lj_auditlog: remove redundant "size" field
5ea4b74 lj_auditlog: use msgpack format for audit log
cb132d1 Add lj_auditlog (very preliminary)
6259c0b Merge branch 'master' into v2.1
630ff31 Add missing LJ_MAX_JSLOTS check.
31afda3 Merge branch 'master' into v2.1
1c89933 Fix LJ_MAX_JSLOTS assertion in rec_check_slots().
8271c64 RELEASE LuaJIT-2.1.0-beta3
e9f8abf Update changelog.
16dc7fb Merge branch 'master' into v2.1
0bf80b0 RELEASE LuaJIT-2.0.5
ae0d438 Update changelog.
b608891 FFI: Update docs on compiler limitations.
cf8a5be Add FOLD rules for mixed BAND/BOR with constants.
fbfbd7b FFI: Compile bitfield loads/stores.
dc5eb65 Merge branch 'master' into v2.1
02b4b1e Add workaround for MSVC 2015 stdio changes.
ed54eac MIPS64: Fix stores of MULTRES.
58aaac3 MIPS64: Fix write barrier in BC_USETV.
18efb33 ARM64: Fix stores to vmstate.
cced178 Document added C API extensions from Lua 5.2/5.3.
de26f76 From Lua 5.2: Add lua_tonumberx() and lua_tointegerx().
2b8de8c From Lua 5.2: Add luaL_setmetatable().
cde968f From Lua 5.2: Add luaL_testudata().
f2e2a3f From Lua 5.3: Add lua_isyieldable().
ef23b70 From Lua 5.2: Add lua_copy().
c67a098 From Lua 5.2: Add lua_version().
9c685f7 Refactor with LUA_OK.
22dfa63 Allow building on Haiku OS.
7c7843e Merge branch 'master' into v2.1
247b362 OSX: Fix build with recent XCode.
ca49220 Merge pull request snabbco#60 from lukego/logo
7bf26e6 Add new "uplifting" RaptorJIT logo
de97b9d Add some more changes and extensions from Lua 5.2.
dc320ca Remove old Lua 5.0 compatibility defines.
c29afcb Merge branch 'master' into v2.1
e205ad0 FFI: Fix FOLD rules for int64_t comparisons.
3143b21 ARM64: Add big-endian support.
4318163 testsuite/bench: Tweaked tests to run longer
f5aa329 README.md: Add note about where benchmark visualizations go
b1b52db Fix markdown goof in README.md
7a35839 Import revamped nix benchmark framework
742104f Merge pull request snabbco#55 from lukego/slow-lea
7356708 md5 benchmark 15% speed by removing "slow LEA"
78f5f1c x64/LJ_GC64: Fix emit_loadk64().
024ade7 LJ_GC64: Fix BC_CALLM snapshot handling.
fa126c5 x64/LJ_GC64: Fix assembly of CNEWI with 64 bit constant pointer.
779a1eb ARM64: Fix Nintendo Switch build.
0cf7885 ARM64: Fix XLOAD/XSTORE with FP operand.
d54947d Merge pull request snabbco#52 from lukego/nix-update
398bd28 Cleaned up nix expressions
82487c7 Travis-CI: Update now that nix runs the test suite
c025664 nix: pin nixpkgs, pin clang 4.0, run test suite
010a99b Add 'testsuite/' from commit '96f816c5e5acbaf33af723e28fba6f4a45e05b6b'
0659092 Remove submodule for testsuite
3ec0f9c Merge pull request snabbco#49 from lukego/fix-kkptr
b1bc13b Compile with -Werror (treat warnings as errors)
fb32f91 Fix IR_KKPTR case of b1cfd27
693909f Merge pull request snabbco#47 from lukego/travis-jit-options
b1cfd27 lj_asm_x86.h: Fix CNEWI for constant pointers
9fcb036 Merge pull request snabbco#44 from lukego/rm-vm-ifdef
d286c95 Fixed typo in jit=-O1
03ad911 Travis CI: Test -O3/-O2/-O1/-joff separately
96f816c Merge branch 'lukego/branchmarks'
c8b2b1c vm_x64.dasc: Resolve +JIT +FFI -X64WIN
684f0f7 Merge pull request snabbco#43 from lukego/rm-dualnum
170c3ac vm_x64.dasc: Fix FORL type coercion
f458d9e Fix mistakes in DUALNUM removal
de5568e Remove Lua 5.0 compatibility defines.
fa02289 Remove DUALNUM mode
0632142 Merge pull request snabbco#40 from lukego/readme-optimize
5f263f2 README.md: Add software optimization links
7a75b53 Merge pull request snabbco#39 from lukego/readme8
f7122f1 README: Declared CPU & Optimization policy
85df062 Merge pull request snabbco#38 from lukego/no-unwind
d0cb401 Merge pull request snabbco#36 from lukego/rm-introspect
5660da3 README.md: Note +NO_UNWIND
8f2744a ifdef-defile: Correct spelling of LJ_NO_UNWIND
f7dc94a Define NO_UNWIND
e2e5689 Remove unused lj_vm_profhook() prototype
972fc1e lib_jit.c: Remove introspection and jit.attach()
521a874 Merge pull request snabbco#35 from lukego/rm-vmevent
df45ff5 Remove PROFILE and VMEVENT features
c40e6bf Merge pull request snabbco#33 from lukego/rm-amalg
0b4a0d2 Merge pull request snabbco#34 from lukego/rm-dotbat
eb052df Remove '*.bat' console build batchfiles
84379d3 Remove "amalg" amalgamated build"
aa188bc Merge pull request snabbco#32 from lukego/nix-comments
cd0e416 README.md: Add link to default.nix
3a523de default.nix: Commented
937375e Merge pull request snabbco#30 from lukego/readme7
a4a5720 README.md: Updated build instructions
631e214 Merge pull request snabbco#27 from lukego/testsuite-plusslow
1c74123 Merge branch 'master' into testsuite-plusslow
03875be Merge pull request snabbco#29 from lukego/nix
1124340 Travis-CI update for nix-based build.
60aa095 Specify build dependencies with nix
78f9acf Makefile: Replace minilua with luajit dependency
5726c88 Switch from gcc to clang
9fedd59 Travis-CI: Added '+slow' argument to test suite
a717eb1 Merge pull request snabbco#21 from lukego/raptorjit-testsuite
bfe7ddc Update Travis-CI to use raptorjit-testsuite
d5b9354 Add raptorjit-testsuite submodule
66b4822 Removed luajit-test-cleanup submodule
e094845 Merge pull request #1 from lukego/fix366
5ccbcfe Make test 366 pass by adding "move:" to expectation
235e82b Merge pull request snabbco#20 from lukego/readme6
28f0f6b README.md: Indulge in more pithy quotations
5af7ae7 Merge pull request snabbco#19 from lukego/dce-fastcall
ac6311d Remove definition of LJ_FASTCALL (a NOP)
ac49377 Remove all uses of LJ_FASTCALL (a NOP)
ad950cc Merge pull request #17 from lukego/readme5
0e8e997 Revised README.md
3523a63 Merge pull request #16 from lukego/copyright
d32cb90 Merge pull request #15 from lukego/contributing
43e53c7 COPYRIGHT: Update the COPYRIGHT file inherited from LuaJIT
9359d14 Added CONTRIBUTING.md
e2eb703 Merge pull request #14 from lukego/testsuite
09b2f3e Add LuaJIT test suite to Travis-CI
8796648 Add LuaJIT/LuaJIT-test-cleanup to submodules/
3ec733f Merge pull request #12 from lukego/readme4
a168dc6 README.md: Add quotes, fix benchmarks link
7aab422 Merge pull request #10 from lukego/rm-dynasm
7237ba5 Merge pull request #9 from lukego/rm-jit
e2968cc Removed dynasm modules for unsupported architectures
b270bf0 Remove jit.p, jit.v, jit.dump, disassemblers
7446725 Merge pull request #8 from lukego/readme3
7fe552f Revised README.md
33e308e Merge pull request #7 from lukego/perftest
f4c8ca6 README.md: Performance regression tests link
18225a6 Merge pull request #6 from lukego/travis
1842bc3 README.md: Added Travis-CI status badge.
0213af2 Added absolute minimum .travis.yml
2fcc0a4 Merge pull request #5 from lukego/bigbang
c2d3d70 Merge pull request #4 from lukego/conduct
4daf440 Merge pull request #3 from lukego/apache2
78a072c Merge pull request #2 from lukego/readme2
40381fa Remove unused code.
58b063b CONDUCT.md: Add simple code of conduct
3127cb0 COPYING: Switch to Apache License 2.0 for new code
827e3d6 Add ifdef-defile config for 'unifdef'
7beb3b2 Remove all architectures except x86-64.
d1c0e13 Remove LUAJIT_USE_PERFTOOLS
006018f Change wording of README
dcda227 Merge pull request #1 from lukego/luajit-v2.1
50ed432 Merge remote-tracking branch 'luajit/v2.1'
5c74044 Added initial README.md
6a66f5d Added LUAJIT_VMPROFILE: new profiler backend
fe8abc881 strings: compare hash as well
014708b Add test for BC_VARG slot revival
63a6f7e Add test for BC_KNIL slot revival under LJ_GC64
14c132e Add tests for table indexing (inspired by snabbco#221)
73139f8 Disable some tests under 5.2 compatibility
f333908 Added bench/PARAM_x86_CI.txt (CI params)
bcf938b Extend cdata_var test slightly
071f050 Exercise string concat some more
e7b029b issue #8 removing tests
7897e7f Add tests for allocation of variable-sized cdata
6fe6fbe add coroutine.lua
ad494d6 issue #8 add strings.lua and literals.lua to the execution
2faff35 issue #8 add strings.lua and literals.lua to the execution
8e20d26 Update README.md
318dedd Update README.md
9b1b6bc Merge branch 'roulette' into maintainer
a71cd6d roulette: Stop seeding the random number generator
96cfbb3 Merge branch 'roulette' into maintainer
b0a75b4 Added bench/roulette.lua
cd42900 issue #8 add dummy file to ensure directory is saved in git
3e73138 issue #8 add dummy file to ensure directory is saved in git
a1dccdb issue #8
6e2030f issue #8 add 5.2.2 tests
ef23b70 issue #8 add 5.2.2 tests
7b022d4 Merge branch 'lua-51-testsuite' of https://github.com/LuaJIT/LuaJIT-test-cleanup into lua-51-testsuite
ea00add issue #8 add 5.2.2 tests
b116313 Update README.md
45b2258 issue #8 initial attempt to get the tests running
0497c7b issue #8 initial attempt to get the tests running
a6bb93e Merge branch 'lua-51-testsuite' of https://github.com/LuaJIT/LuaJIT-test-cleanup into lua-51-testsuite
1cb6161 issue #8 initial attempt to get the tests running
e832e54 Update README.md
e6fc702 Create README.md
0dda7b2 issue #8 baseline checkin of Lua 5.1 test suite
c3224bb Exercise TSETR and TSETM slow paths.
703e9cf Skip some tests under LuaJIT 2.0
d7985d1 Modernise more ffi tests.
a82c499 Modernise some FFI tests.
9c27a59 Fix batch modifier application.
9f1451d Normalise line endings.
3e5cca7 Modernise some tests.
bcd286b Modernise more tests.
1bee68f PUC-Rio Lua compatibility.
6a7e342 Modernise misc/meta_* tests.
e002a08 Improve reporting of failing tests in --quiet mode.
f40304d Modernise string_op test.
b8bbda3 Modernise goto test.
74d256f Remove some already-modernised tests from misc.
c2da6d8 Merge pull request #7 from corsix/shakeup
488e3fb Shake things up.
634b212 Merge pull request #6 from ladc/master
581a474 Put subtests in 'test' dir
1d7aaed Moved proposed test runner and examples into 'experimental' directory.
82586b1 Improve filenames of extracted tests and error reporting in test runner
91cb29b Add workdir argument to extract() in tester module
a6e5102 Capture stderr when tests are run externally in run_single()
14bfa87 Add --runcmd='x' option to test runner
765714f Put @key: value pairs in separate attributes table in parse()
16b3293 Don't print an empty description in build_codestring() in tester module
8859058 Implement @key: value matching in parse() function of tester module
0d975fa Clean up test script (args, tag patterns)
5f331e7 Avoid string.rep in test.lua
24d2b97 Move some tests into new structure and adapt comments to test runner.
b0b3a20 Add test.lua for running and filtering tests.
af54fa1 Add verbose option to run() and run_single()
639480b Add filter() to tester module for filtering tags
a4dd1e0 Add run_single() and run() to tester module.
a4ec002 Add index() and extract() to tester module.
46e1fea Add first part of test framework: parse tests.
a273241 Initial commit

git-subtree-dir: lib/luajit
git-subtree-split: 54cc2a1b4c8ccf6e0c227e9c789947250944b322
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants