aboutsummaryrefslogtreecommitdiffstats
path: root/erts
AgeCommit message (Collapse)Author
2015-08-20Merge branch 'maint'Henrik Nord
Conflicts: OTP_VERSION erts/vsn.mk
2015-08-20Merge branch 'maint-18' into maintHenrik Nord
2015-08-18Merge branch 'maint'Lukas Larsson
* maint: erts: Make sure to unlock status lock when setting process prio
2015-08-18Merge branch 'lukas/erts/process_priority_unlock/OTP-12943' into maintLukas Larsson
* lukas/erts/process_priority_unlock/OTP-12943: erts: Make sure to unlock status lock when setting process prio
2015-08-18Prepare releaseErlang/OTP
2015-08-18Merge branch 'vinoski/stderr-eagain/OTP-12942' into maint-18Erlang/OTP
* vinoski/stderr-eagain/OTP-12942: Handle ERRNO_BLOCK in fd_driver async functions
2015-08-18Handle ERRNO_BLOCK in fd_driver async functionsSteve Vinoski
Several users on erlang-questions have reported problems with recent releases where output to standard_error causes standard_error_sup to die from receiving an unexpected eagain error. In the fd_driver, change the fd_async() function to handle EINTR, and change fd_ready_async() to handle ERRNO_BLOCK. Add a new test to standard_error_SUITE to generate output to standard_error and ensure that standard_error_sup does not die. Thanks to Kota Uenishi for contributing the test case.
2015-08-18erts: Fix binary memory leak in ttsl driverLukas Larsson
2015-08-13erts: Make sure to unlock status lock when setting process prioLukas Larsson
2015-08-10Merge branch 'maint'Lukas Larsson
* maint: erts: Don't abort when a system process is terminated
2015-08-10Merge branch 'lukas/erts/system_process_core/OTP-12934' into maintLukas Larsson
* lukas/erts/system_process_core/OTP-12934: erts: Don't abort when a system process is terminated
2015-08-10Merge branch 'maint'Lukas Larsson
* maint: Teach smp VM how to deal with crash of a linked trace port
2015-08-10Merge branch 'sverk/smp-trace-port-exit-bug/OTP-12901' into maintLukas Larsson
* sverk/smp-trace-port-exit-bug/OTP-12901: Teach smp VM how to deal with crash of a linked trace port
2015-08-10Teach smp VM how to deal with crash of a linked trace portSverker Eriksson
Problem: The sys-msg-dispather crashes the VM when trying to send exit signals from the links of the terminating trace port. If try-lock of the linked process fails, a pending exit is scheduled and erts_scheduler_data() is then called to find "my" run queue. But sys-msg-dispatcher is not a scheduler and has no scheduler data, hence SEGV. Fix: If not a scheduler and we cannot get process locks, schedule process in its previous run-queue.
2015-08-05Merge branch 'maint'Björn Gustavsson
* maint: Fix crash when disassembling modules with BIFs
2015-08-05Merge branch 'bjorn/erts/beam_debug' into maintBjörn Gustavsson
* bjorn/erts/beam_debug: Fix crash when disassembling modules with BIFs
2015-07-14erts: Update major version numberLukas Larsson
2015-07-14Merge branch 'lukas/ose/remove/OTP-12573'Lukas Larsson
* lukas/ose/remove/OTP-12573: Remove OSE from erl_interface ose: Remove all code related to the OSE port
2015-07-14erts: Don't abort when a system process is terminatedLukas Larsson
2015-07-10ose: Remove all code related to the OSE portLukas Larsson
The OSE port is no longer supported and this commit removed it and any changes related to it. The things that were general improvements have been left in the code.
2015-07-08Merge branch 'maint'Rickard Green
* maint: Updated OTP version Prepare release Fix calculation of end time Prefer monotonic time that stop during suspend Avoid unnecessary copying of data when retrieving corrected monotonic time Add the --enable-gettimeofday-as-os-system-time configure switch Conflicts: OTP_VERSION erts/vsn.mk
2015-07-08Merge branch 'maint-18' into maintRickard Green
* maint-18: Updated OTP version Prepare release Fix calculation of end time Prefer monotonic time that stop during suspend Avoid unnecessary copying of data when retrieving corrected monotonic time Add the --enable-gettimeofday-as-os-system-time configure switch
2015-07-08Prepare releaseErlang/OTP
2015-07-08Merge branch 'rickard/end-time-fix/OTP-12896' into maint-18Erlang/OTP
* rickard/end-time-fix/OTP-12896: Fix calculation of end time
2015-07-08Merge branch 'rickard/monotonic-clock-source/OTP-12895' into maint-18Erlang/OTP
* rickard/monotonic-clock-source/OTP-12895: Prefer monotonic time that stop during suspend
2015-07-08Merge branch 'rickard/read_corrected_time/OTP-12894' into maint-18Erlang/OTP
* rickard/read_corrected_time/OTP-12894: Avoid unnecessary copying of data when retrieving corrected monotonic time
2015-07-08Merge branch 'rickard/gettimeofday/OTP-12892' into maint-18Erlang/OTP
* rickard/gettimeofday/OTP-12892: Add the --enable-gettimeofday-as-os-system-time configure switch
2015-07-08Merge branch 'rickard/non-smp-trace-port-exit-bug/OTP-12889' into maint-18Erlang/OTP
* rickard/non-smp-trace-port-exit-bug/OTP-12889: Teach non-smp VM how to deal with trace port crash Test case testing crash in tracer port
2015-07-08Fix calculation of end timeRickard Green
2015-07-08Prefer monotonic time that stop during suspendRickard Green
2015-07-08Avoid unnecessary copying of data when retrieving corrected monotonic timeRickard Green
2015-07-08Fix crash when disassembling modules with BIFsBjörn Gustavsson
In a debug-compiled emulator, running erts_debug:df(io) would trigger an assertion failure: 1> erts_debug:df(io). beam/beam_debug.c:301:erts_debug_disassemble_1() Assertion failed: (((funcinfo[0]) & 0x3F) == ((0x0 << 4) | ((0x2 << 2) | 0x3))) Aborted (core dumped) It turns out that the assertion is wrong. It should have been updated in 64ccd8c9b7a7 which made it possible to have stubs for BIFs in the BEAM code for a module. The faulty assertion was only found when when 16317f73f79265 added a smoke test of the BEAM disassembler.
2015-07-07Add the --enable-gettimeofday-as-os-system-time configure switchRickard Green
Forces usage of gettimeofday() for OS system time
2015-07-07Merge branch 'maint'Zandra Hird
2015-07-07Merge branch 'maint-17' into maintZandra Hird
Conflicts: OTP_VERSION erts/doc/src/notes.xml erts/vsn.mk lib/runtime_tools/doc/src/notes.xml lib/runtime_tools/vsn.mk otp_versions.table
2015-07-06Prepare releaseErlang/OTP
2015-07-06Merge branch 'rickard/non-smp-trace-port-exit-bug/OTP-12889' into maint-17Erlang/OTP
* rickard/non-smp-trace-port-exit-bug/OTP-12889: Teach non-smp VM how to deal with trace port crash Test case testing crash in tracer port
2015-07-06Teach non-smp VM how to deal with trace port crashRickard Green
2015-07-06Test case testing crash in tracer portRickard Green
2015-07-06Improve unpacking performance on x86_64Björn Gustavsson
When unpacking operands on 64-bit CPUs, use a smarter mask to help the compiler optimize the code. It turns out that on x86_64, if we use the mask 0xFFFFUL (selecting the 16 least significant bits), the compiler can combine a move and a mask operation into the single insruction 'movzwl', which will eliminate one instruction.
2015-07-06Slightly tweak the peformance for get_listBjörn Gustavsson
Fetch the head and tail parts to temporary variables before writing them to their destinations. That should allow the CPU to perform the moves in parallel, which might improve performance.
2015-07-06Speed up list matchingBjörn Gustavsson
The combination is_non_empty_list followed by get_list is extremly common (but not in estone_SUITE, which is why it has not been noticed before). Therefore it is worthwile to introduce a combined instruction.
2015-07-06Eliminate the variable temp_bits at the top scope of process_main()Björn Gustavsson
2015-07-06Eliminate prefetch for conditional instructionsBjörn Gustavsson
Not pre-fetching in conditional instructions (instructions that use -fail_action) seems to improve performance slightly. The reason for that is that conditional instructions may jump to the failure label, wasting the pre-fetched instruction. Another reason is that that many conditional instructions do a function call, and the register pressure is therefore high. Avoiding the pre-fetch may reduce the register pressure and pontentially result in more efficient code.
2015-07-03Teach beam_makeops to pack operands for move3 and move_windowBjörn Gustavsson
It is currently only possible to pack up to 4 operands. However, the move_window4 instrucion has 5 operands and move_window5 and move3 instrucations have 6 operands. Teach beam_makeops to pack instructions with 5 or 6 operands. Also rewrite the move_window instructions in beam_emu.c to macros to allow their operands to get packed.
2015-07-03Ensure that the move_call_ext_{last,only} instructions are usedBjörn Gustavsson
Update transformations to ensure that the move_call_ext_last and move_call_ext_last are used.
2015-07-03beam_makeops: Eliminate unnecessary masking when packing 3 operandsBjörn Gustavsson
When packing 3 operands into one word, there would be an unnecessary mask operation when extracting the last operand.
2015-07-03Use a cheaper tag scheme for 'd' operandsBjörn Gustavsson
Since 'd' operands can only either an X register or an Y register, we only need a single bit to distinguish them. Furthermore, we can pre-multiply the register number with the word size to speed up address calculation.
2015-07-03Introduce swap_temp/3 and swap/2Björn Gustavsson
Sequences of three move instructionst that effectively swap the contents of two registers are fairly common. We can replace them with a swap_temp/3 instruction. The third operand is the temporary register to be used for swapping, since the temporary register may actually be used. If swap_temp/3 instruction is followed by a call, the temporary register will often (but not always) be killed by the call. If it is killed, we can replace the swap_temp/3 instruction with a slightly cheaper swap/2 instruction.
2015-07-03Introduce specialized versions of move2Björn Gustavsson
Currently, move2/2 does the two moves sequentially to ensure that the instruction will always work correctly. We can do better than that. If the two move instructions have any registers in common, we can introduce simpler and slightly more efficient instructions to handle those cases: move_shift/3 move_dup/3 For the remaining cases when the the move instructions have no common registers, the move2/4 instruction can perform the moves in parallel which is probably slightly more efficient. For clarity's sake, we will remain the instruction to move2_par/4.