- 13 Jan, 2016 2 commits
-
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 23 Nov, 2015 1 commit
-
-
Grzegorz Daniluk authored
-
- 09 Nov, 2015 1 commit
-
-
Adam Wujek authored
This commit has to be preserved as it is included in WRS release 4.2
-
- 13 Oct, 2015 2 commits
-
-
Alessandro Rubini authored
for tx stamps, when we added the check about the frame content (to avoid problems with high data load, see 4179fcdc), it got broken for UDP. That's because the cmesg we get back includes a raw frame anyways, even if we transmitted UDP or other protocols. So now check for the trailing part of the frame we get back, to avoid any extra leading header whatever its lenght. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 09 Oct, 2015 1 commit
-
-
Alessandro Rubini authored
During track-phase we used to find the setpoint and then track changes in the master-to-slave delay, thus not zeroing any initial error that may happen (e.g. the initial sample was more jittery than average). Now we use the clock offset as correction source. Setpoint is adjusted by 1/4th of the current offset, to smooth a little the jitter. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 08 Oct, 2015 1 commit
-
-
Alessandro Rubini authored
This is likely the result of my cleanup of wr-servo, where I forgot some pieces. Greg collected some interesting logs in wrpc where the setpoint was calculated wrongly. This fixes the thing and removes some redundancy. I "git diff" order: - avoid WR_UNINITIALIZED, really unused. Do what's needed at wr_servo_init() time - adjust phase to 0 at init time, where s->cur_setpoint is set (we really should set and use in a single unified place) - set delta_ms_prev before entering TRACK_PHASE, not earlier where it doesn't fit - avoid extra checks of non-zero offset.seconds and offset.nanoseconds, because they are checked at the beginning anyways. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 01 Sep, 2015 5 commits
-
-
Alessandro Rubini authored
-
Alessandro Rubini authored
This adds -Wstrict-prototypes -Wmissing-prototypes and takes actions accordingly. Some of the solutions are ugly, especially in the bare architectures, but I prefer to be warned if I take dangerous paths wrt prototypes while writing further code. I'm upset by those two not being included in -Wall, as they used to. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
The existing rule to check whether WRPCSW_ROOT is properly set (by environment or default in Kconfig) forced a dependency on all object file. Thus, all files were rebuilt every time. We now force the check only as a dependency for the first object file, which means ony fsm.o (and then ppsi.o) is built if you run "make" on a just-built source tree. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
This reverts commit 1d5a461d. actually, the error count must be zeroed every time, not only after printing: we want to print if the error persists for 5 iterations, not every 5th time. My bad.... Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
This is a temporary workaround. We are going to fix the tx/rx functions to received the header and payload together, but currently they are separate so the offset must be 0 for raw ethernet. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 25 Aug, 2015 1 commit
-
-
Grzegorz Daniluk authored
It's done to prevent PPSi leaving Slave state on the WRS when high load of background traffic is present. It's just a temporary workaround. In the future the HDL of the switch has to be fixed so that PPSi frames have higher priority than the normal traffic and are not dropped when WRS is overloaded.
-
- 24 Aug, 2015 2 commits
-
-
Adam Wujek authored
Make max offset range from -500ps to +500ps, instead of -1000ps to +1000ps Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
-
Adam Wujek authored
Fix problem with hanging send in PPSI
-
- 21 Aug, 2015 4 commits
-
-
Alessandro Rubini authored
Even under load, with queues full, the wrs delays frames less than one ms. Thus, if we didn't get a timestamp in 1ms, we won't ever get it. Add some software delay and clearly we don't need 100ms as in current code. Please note that all state machines are not running during this wait, as we are single-process single-thread. So now we wait for 6ms at most (3 times 2ms at most, but the first time we may get an older timestamp, then discarded). Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
This turns the while(1) with internal retry++ to a loop based on retry. With two changes: 1- when recvmsg() gets EAGAIN (or other errors), we loop over instead of returning. Maybe this doesn't happen anymore thanks to the change from POLLIN to POLLERR (previous commit), but this is philosophically correct anyways. 2- we don't print anything when poll() returns 0, as these messages were redundant, especially when there were many in a row. And if nothing is there we expect to get 0. So we removed these: poll_tx_timestamp: poll() = 0 (Success) Still, knowing the timestamp was late is useful, but a single message suffices, and it's there now. If you wonder why we loop instead of using a longer timeout, the reason is we must get rid of timestamps for older frames (the ones that timeout at the previous iteration). Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
It may happen, though rarely, that frames are not sent (or not freed at kernel level), and we build up an output queue, so at some point we get -EAGAIN on sending. With blocking writes, this situation was stalling the whole process. This patch helped us diagnosing a problem in our own network driver, which had a memory leakage, but using non-blocking sockets and reporting erors is the right thing to do anyways. This patch reports the error using pp_diag with a priority 0; thus the message is always printed, but by virtue of pp_diag we have the name of the port automatically added. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
While the manual pages say nothing, https://lwn.net/Articles/291793/ hints that we should use POLLERR instead of POLLIN. I hoped to get rid of some of the poll messages, but nothing changes in simple tests. I hope we get rid of the EAGAIN in the later recvmsg() (likely with POLLIN we got the socket as readable, but nothing was in the error queue -- we had a new incoming frame instead). Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 23 Jul, 2015 1 commit
-
-
Alessandro Rubini authored
commit 3b985b02 added the new vlan-aware issue function, but didn't remove the old call. Thus, wrs is sending out announce messages twice in a row (with two proper sequence numbers). Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 22 Jul, 2015 3 commits
-
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
The old code used to discard every other tuple, because when "wait for hardware was set", the code cleared the flag and did nothing. This was exposed by one of the clean-up passes, but I chose not to change the behaviour. Now I do the normal work when wait_for_hw gets cleared. However, as a side effect, wr_mon was always saying "wait for hardware", because any action would set the flag. Thus, the solution is not setting the flag in TRACK_PHASE, but only in the initial SYNC_SEC and SYNC_NSEC states. The code then checks if the hardware is busy, irrespective of any flag. The result in wr_mon is matching reality, and the code works twice as fast as it used to. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
The previous code to set system time from WR time is not really working. It is implemented in wrs_time_ops->set and it relies on ppsi being non-wr slave before being wr slave, but this should not happen. Such code, with its "weird" message, remains in place to be used when we run in non-wr mode (as slaves). This new code is the right thing to do: when we are done syncing the "big steps" in WR, and start dealing with sub-tick, we jump system time. There is no correction for TAI/UTC because the time operations for arch-unux (set/get) already do the conversion. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 21 Jul, 2015 5 commits
-
-
Alessandro Rubini authored
Since commit f3d427ee, we lost the concept of "next_state" (to make code simple), but this means that we should report to wr_mon the state string we acted on, not the next. Otherwise, we see SYNC_PHASE all the time, when we are actually waiting for SYNC_SEC or SYNC_NSEC to complete the adjustment. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Earlier we only called it in from slave state, but it's correct to do it in any state (thus also from st_com_master_handle_announce, used by listening and master mode. This makes WR syncing much faster. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 20 Jul, 2015 2 commits
-
-
Alessandro Rubini authored
Sometimes we get error in the recv(MSGQUEUE), with EAGAIN. Likely we got a real frame (so poll for reading is ok) but no stamp yet. This unsynced the transmitted frames and the error queue. This fix, i.e. retry if getting nothing, seems to fix the (rare) problem. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
If we were offset by a whole second, we'd remain in SYNC_SEC (SYNC_TAI) without moving to SYNC_PHASE. It happens when you change the second counter by hand, but it's very unlikely in the initial setup. Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
- 10 Jul, 2015 1 commit
-
-
Adam Wujek authored
Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
-
- 09 Jul, 2015 3 commits
-
-
Alessandro Rubini authored
What happened, sometimes, is that the phase setpoint take a meaningless (and high) value. This is because we were into SYNC_NSEC and moved to SYNC_PHASE without checking. Maybe because of other problems too. That situation led to a lockup of the softpll, which tries to reach an unreachable setpoint. Now we force to stay in SYNC_NSEC if the offset is more than one cycle (and SYNC_SEC if more than one second). As a side effect, the phase setpoint is always 0..16ns (while earlier I got setpoints of 1.5 of 17.5 etc, up to 64.5 for the same setup and same temperature). The problem here is: what is going to happen if, by thermal effect, the phase setpoint crosses the 0..16n interval? Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Adam Wujek authored
-
- 08 Jul, 2015 3 commits
-
-
Adam Wujek authored
Tune SNMP_MAX_OFFSET_PS and SNMP_MAX_DELTA_RTT_PS Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
-
Adam Wujek authored
Remove the n_err_rxtx_deltas from the struct wr_servo_state since it is not used anymore. Checking deltas was moved directly to SNMPD. Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
-
Adam Wujek authored
Checking whether deltas are zero is moved to SNMP. Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
-
- 06 Jul, 2015 2 commits
-
-
Benoit Rat authored
When changing the state of the WR servo we can call a hook (function pointer) to a function defined by a user in the upper layer (wrpc-sw). The purpose of the hook is to add new functionalities when we reach a specific state (Alarms, IRIGB, etc...) without needing to change the code of PPSI. [This is a rework of the original patch by Benoit. Mainly, I added the extra integer argument to the hook (so I call it twice: both entering and leaving the servo), and I removed the function to set the hook from wrpc: the main function can set the pointer directly] Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-
Alessandro Rubini authored
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-