update to 1.1.0 (RHEL-52089 RHEL-52090 RHEL-52091 RHEL-52197)
Resolves: RHEL-52089 RHEL-52090 RHEL-52091 RHEL-52197
This commit is contained in:
parent
86fe9745b1
commit
286f751702
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
/synce4l-1.0.0.tar.gz
|
/synce4l-1.1.0.tar.gz
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (synce4l-1.0.0.tar.gz) = b97656a50ee4cabdaddde166c2b74b16ebca339defb69e265c5222198c6d469af4e30328c3af47dcbe916f8474f04369e49f5fe98feb509cf7bb41e69e5d429b
|
SHA512 (synce4l-1.1.0.tar.gz) = d13418f9d229d3b335cf60f4f7a00bb21850d17c3d4f6486e0e13ce7ce6e2435f697b08e69a33980561d34d403148fb40e648eceb2c0b56a5841366d200fd650
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
commit 11cc3508d4b7594e2a429000d162b3582d242c20
|
|
||||||
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
Date: Mon Nov 6 14:10:42 2023 +0100
|
|
||||||
|
|
||||||
Fix printf formats for 32-bit archs
|
|
||||||
|
|
||||||
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
|
|
||||||
diff --git a/config.c b/config.c
|
|
||||||
index 56fcbbd..723ff84 100644
|
|
||||||
--- a/config.c
|
|
||||||
+++ b/config.c
|
|
||||||
@@ -21,6 +21,7 @@
|
|
||||||
*/
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <float.h>
|
|
||||||
+#include <inttypes.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
@@ -767,7 +768,7 @@ config_get_u64(struct config *cfg, const char *section, const char *option)
|
|
||||||
pr_err("bug: config option %s type mismatch!", option);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
- pr_debug("config item %s.%s is %lu (0x%lx)", section, option,
|
|
||||||
+ pr_debug("config item %s.%s is %"PRIu64" (0x%"PRIx64")", section, option,
|
|
||||||
ci->val.u64, ci->val.u64);
|
|
||||||
return ci->val.u64;
|
|
||||||
}
|
|
||||||
diff --git a/nl_dpll.c b/nl_dpll.c
|
|
||||||
index f343de6..4dee01b 100644
|
|
||||||
--- a/nl_dpll.c
|
|
||||||
+++ b/nl_dpll.c
|
|
||||||
@@ -8,6 +8,7 @@
|
|
||||||
#include <netlink/genl/genl.h>
|
|
||||||
#include <netlink/genl/ctrl.h>
|
|
||||||
#include <linux/rtnetlink.h>
|
|
||||||
+#include <inttypes.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include "nl_dpll.h"
|
|
||||||
#include "print.h"
|
|
||||||
@@ -118,7 +119,7 @@ int nl_dpll_device_id_get(struct nl_sock *sk, struct sk_arg *arg,
|
|
||||||
pr_err("%s: failed to send request", __func__);
|
|
||||||
goto msg_free;
|
|
||||||
}
|
|
||||||
- pr_debug("DEVICE_ID_GET request sent dpll id: %lu %s, ret:%d",
|
|
||||||
+ pr_debug("DEVICE_ID_GET request sent dpll id: %"PRIu64" %s, ret:%d",
|
|
||||||
clock_id, module_name, ret);
|
|
||||||
|
|
||||||
arg->err = 0;
|
|
90
synce4l-ccwarns.patch
Normal file
90
synce4l-ccwarns.patch
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
commit b8089eabc28d665cba462c29aabdb159f0f153a6
|
||||||
|
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
Date: Tue May 28 13:38:13 2024 +0200
|
||||||
|
|
||||||
|
Fix more compiler warnings
|
||||||
|
|
||||||
|
Fix the following warnings observed when -O2 and -D_FORTIFY_SOURCE=2 are
|
||||||
|
added to CFLAGS.
|
||||||
|
|
||||||
|
synce_dev.c: In function ‘rebuild_inputs_prio’:
|
||||||
|
synce_dev.c:610:28: warning: ‘best_c_idx’ may be used uninitialized [-Wmaybe-uninitialized]
|
||||||
|
610 | all[best_c_idx] = NULL;
|
||||||
|
| ^
|
||||||
|
synce_dev.c:582:39: note: ‘best_c_idx’ was declared here
|
||||||
|
582 | int i = 0, prio_count = 0, j, best_c_idx, ret;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
|
||||||
|
synce_manager.c: In function ‘synce_manager_server_thread’:
|
||||||
|
synce_manager.c:260:9: warning: ‘strncpy’ specified bound 108 equals destination size [-Wstringop-truncation]
|
||||||
|
260 | strncpy(server.sun_path, synce_clock_get_socket_path(clk),
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
261 | sizeof(server.sun_path));
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
synce_manager.c:343:20: warning: ‘ret’ may be used uninitialized [-Wmaybe-uninitialized]
|
||||||
|
343 | if (!ret)
|
||||||
|
| ^
|
||||||
|
synce_manager.c:241:26: note: ‘ret’ was declared here
|
||||||
|
241 | int tlv_num = 0, ret, i, resp_len, bytes_read;
|
||||||
|
| ^~~
|
||||||
|
|
||||||
|
synce_manager.c: In function ‘synce_manager_server_thread’:
|
||||||
|
synce_manager.c:346:25: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
|
||||||
|
346 | write(new_socket, response, resp_len);
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/synce_dev.c b/synce_dev.c
|
||||||
|
index fc784ed..5e2bbb9 100644
|
||||||
|
--- a/synce_dev.c
|
||||||
|
+++ b/synce_dev.c
|
||||||
|
@@ -579,7 +579,7 @@ static bool source_invalid(struct synce_clock_source *c)
|
||||||
|
int rebuild_inputs_prio(struct synce_dev *dev)
|
||||||
|
{
|
||||||
|
struct synce_clock_source *c, *best_c, **all, **prioritized;
|
||||||
|
- int i = 0, prio_count = 0, j, best_c_idx, ret;
|
||||||
|
+ int i = 0, prio_count = 0, j, best_c_idx = 0, ret;
|
||||||
|
uint32_t prio;
|
||||||
|
|
||||||
|
all = calloc(dev->num_clock_sources, sizeof(*all));
|
||||||
|
diff --git a/synce_manager.c b/synce_manager.c
|
||||||
|
index b9ba08d..598ef7e 100644
|
||||||
|
--- a/synce_manager.c
|
||||||
|
+++ b/synce_manager.c
|
||||||
|
@@ -257,8 +257,8 @@ static void *synce_manager_server_thread(void *arg)
|
||||||
|
}
|
||||||
|
|
||||||
|
server.sun_family = AF_UNIX;
|
||||||
|
- strncpy(server.sun_path, synce_clock_get_socket_path(clk),
|
||||||
|
- sizeof(server.sun_path));
|
||||||
|
+ snprintf(server.sun_path, sizeof(server.sun_path), "%s",
|
||||||
|
+ synce_clock_get_socket_path(clk));
|
||||||
|
|
||||||
|
if (bind(server_fd, (struct sockaddr *)&server, sizeof(server)) < 0) {
|
||||||
|
pr_err("%s Bind failed", __func__);
|
||||||
|
@@ -289,10 +289,12 @@ static void *synce_manager_server_thread(void *arg)
|
||||||
|
bytes_read = recv(new_socket, command, MAX_COMMAND_SIZE, 0);
|
||||||
|
if (bytes_read <= 0) {
|
||||||
|
synce_manager_generate_err_tlv(&err_tlv, "NULL command");
|
||||||
|
+ ret = -1;
|
||||||
|
goto return_response;
|
||||||
|
} else if (bytes_read > MAX_COMMAND_SIZE) {
|
||||||
|
synce_manager_generate_err_tlv(&err_tlv,
|
||||||
|
"Command size exceeds MAX_COMMAND_SIZE");
|
||||||
|
+ ret = -1;
|
||||||
|
goto return_response;
|
||||||
|
}
|
||||||
|
ret = synce_manager_parse_input(command, bytes_read, &tlv_array,
|
||||||
|
@@ -340,8 +342,8 @@ return_response:
|
||||||
|
if (tlv_array)
|
||||||
|
free((void *)tlv_array);
|
||||||
|
|
||||||
|
- if (!ret)
|
||||||
|
- write(new_socket, response, resp_len);
|
||||||
|
+ if (!ret && write(new_socket, response, resp_len) != resp_len)
|
||||||
|
+ ret = -1;
|
||||||
|
close(new_socket);
|
||||||
|
}
|
||||||
|
|
24
synce4l-initpinid.patch
Normal file
24
synce4l-initpinid.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
commit b61dd54c1015692785a1766b15f7f5914f68df70
|
||||||
|
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
Date: Wed Aug 7 14:14:32 2024 +0200
|
||||||
|
|
||||||
|
Initialize pin ID to -1
|
||||||
|
|
||||||
|
When creating the pin structure, initialize the pin ID to -1 to avoid
|
||||||
|
matching an existing pin with ID 0 (e.g. CVL-SDP22 on E810) when a
|
||||||
|
nonexistent pin is specified in the config.
|
||||||
|
|
||||||
|
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/dpll_mon.c b/dpll_mon.c
|
||||||
|
index 39659fe..36aa559 100644
|
||||||
|
--- a/dpll_mon.c
|
||||||
|
+++ b/dpll_mon.c
|
||||||
|
@@ -240,6 +240,7 @@ static struct dpll_mon_pin *pin_create(void)
|
||||||
|
}
|
||||||
|
pr_debug("%s %p", __func__, pin);
|
||||||
|
pin->parent_used_by = PARENT_NOT_USED;
|
||||||
|
+ pin->id = -1;
|
||||||
|
STAILQ_INIT(&pin->parents);
|
||||||
|
|
||||||
|
return pin;
|
43
synce4l-noduppin.patch
Normal file
43
synce4l-noduppin.patch
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
commit 11319e050cde0657395d2656e2be4a629b53fb3b
|
||||||
|
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
Date: Mon Aug 5 16:20:49 2024 +0200
|
||||||
|
|
||||||
|
Fix crash in dpll_rt_recv()
|
||||||
|
|
||||||
|
A crash was observed with E810 firmware 4.50 and kernel 6.11-rc1 in
|
||||||
|
dpll_rt_recv() trying to assign pin id to the pin which was removed by
|
||||||
|
remove_no_ifname_pin(). The pin is not a duplicate.
|
||||||
|
|
||||||
|
Add a third parameter to remove_no_ifname_pin() to avoid removing the
|
||||||
|
incorrect pin.
|
||||||
|
|
||||||
|
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/dpll_mon.c b/dpll_mon.c
|
||||||
|
index 06b4bce..39659fe 100644
|
||||||
|
--- a/dpll_mon.c
|
||||||
|
+++ b/dpll_mon.c
|
||||||
|
@@ -256,12 +256,12 @@ static void pin_destroy(struct dpll_mon_pin *pin)
|
||||||
|
free(pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void remove_no_ifname_pin(struct dpll_mon *dm, uint32_t pin_id)
|
||||||
|
+void remove_no_ifname_pin(struct dpll_mon *dm, uint32_t pin_id, struct dpll_mon_pin *except)
|
||||||
|
{
|
||||||
|
struct dpll_mon_pin *pin;
|
||||||
|
|
||||||
|
STAILQ_FOREACH(pin, &dm->pins, list)
|
||||||
|
- if (pin && pin_id == pin->id && pin->ifname == NULL) {
|
||||||
|
+ if (pin && pin != except && pin_id == pin->id && pin->ifname == NULL) {
|
||||||
|
pr_debug_pin("removed duplicated pin", pin);
|
||||||
|
STAILQ_REMOVE(&dm->pins, pin, dpll_mon_pin, list);
|
||||||
|
pin_destroy(pin);
|
||||||
|
@@ -589,7 +589,7 @@ static int dpll_rt_recv(struct nl_msg *msg, void *arg)
|
||||||
|
goto unlock;
|
||||||
|
pin_id = nla_get_u32(an[DPLL_A_PIN_ID]);
|
||||||
|
if (pin) {
|
||||||
|
- remove_no_ifname_pin(dm, pin_id);
|
||||||
|
+ remove_no_ifname_pin(dm, pin_id, pin);
|
||||||
|
pin->id = pin_id;
|
||||||
|
pr_debug_pin("pin assigned id", pin);
|
||||||
|
} else {
|
297
synce4l-ql.patch
297
synce4l-ql.patch
@ -1,297 +0,0 @@
|
|||||||
commit a59358afe10326096c0e4330d705457a65176bb8
|
|
||||||
Author: Yochai Hagvi <yochai.hagvi@intel.com>
|
|
||||||
Date: Thu Nov 30 13:06:01 2023 +0200
|
|
||||||
|
|
||||||
synce4l: fix flows moving from best port to SMA
|
|
||||||
|
|
||||||
When synce4l best source is changed from port and SMA, due to SMA QL
|
|
||||||
update, some flows found broken.
|
|
||||||
|
|
||||||
on choose_best_source, when best source is changed, ibest_source should
|
|
||||||
be NULL since dev_update_ql uses the best_port for configuring
|
|
||||||
|
|
||||||
on dev_step_line_input, when rebuild_prio is set, this case should be
|
|
||||||
hit
|
|
||||||
|
|
||||||
(ML: backported to 1.0.0)
|
|
||||||
|
|
||||||
Signed-off-by: Yochai Hagvi <yochai.hagvi@intel.com>
|
|
||||||
|
|
||||||
diff --git a/synce_dev.c b/synce_dev.c
|
|
||||||
index cd5c787..70936a6 100644
|
|
||||||
--- a/synce_dev.c
|
|
||||||
+++ b/synce_dev.c
|
|
||||||
@@ -525,6 +525,7 @@ static void choose_best_source(struct synce_dev *dev)
|
|
||||||
dev->name);
|
|
||||||
} else {
|
|
||||||
dev->ext_src_is_best = ext_src_is_best;
|
|
||||||
+ dev->best_source = NULL;
|
|
||||||
/* if input source is changing
|
|
||||||
* current input is invalid, send DNU and wait
|
|
||||||
* for EEC being locked in further dev_step
|
|
||||||
@@ -555,14 +556,17 @@ static int dev_step_line_input(struct synce_dev *dev)
|
|
||||||
|
|
||||||
if (rx_ql_changed(dev)) {
|
|
||||||
choose_best_source(dev);
|
|
||||||
- } else if (dev->best_source && dev->best_source->type == PORT) {
|
|
||||||
- if (synce_port_rx_ql_failed(dev->best_source->port)) {
|
|
||||||
- synce_port_invalidate_rx_ql(dev->best_source->port);
|
|
||||||
- force_all_eecs_detach(dev);
|
|
||||||
- dev_update_ql(dev);
|
|
||||||
- dev->best_source = NULL;
|
|
||||||
- choose_best_source(dev);
|
|
||||||
- }
|
|
||||||
+ } else if (dev->best_source && dev->best_source->type == PORT &&
|
|
||||||
+ synce_port_rx_ql_failed(dev->best_source->port)) {
|
|
||||||
+ synce_port_invalidate_rx_ql(dev->best_source->port);
|
|
||||||
+ force_all_eecs_detach(dev);
|
|
||||||
+ dev_update_ql(dev);
|
|
||||||
+ dev->best_source = NULL;
|
|
||||||
+ choose_best_source(dev);
|
|
||||||
+ } else if (dev->rebuild_prio) {
|
|
||||||
+ choose_best_source(dev);
|
|
||||||
+ dev_update_ql(dev);
|
|
||||||
+ dev->rebuild_prio = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
@@ -697,6 +701,7 @@ int synce_dev_init(struct synce_dev *dev, struct config *cfg)
|
|
||||||
dev->recover_time = config_get_int(cfg, dev->name, "recover_time");
|
|
||||||
dev->best_source = NULL;
|
|
||||||
dev->ext_src_is_best = false;
|
|
||||||
+ dev->rebuild_prio = 0;
|
|
||||||
eec_get_state_cmd = config_get_string(cfg, dev->name, "eec_get_state_cmd");
|
|
||||||
ess.holdover = config_get_string(cfg, dev->name, "eec_holdover_value");
|
|
||||||
ess.locked_ho = config_get_string(cfg, dev->name, "eec_locked_ho_value");
|
|
||||||
|
|
||||||
commit 08914289b154ef4467929a84f1b2bf72591e8857
|
|
||||||
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
Date: Mon Jan 8 16:56:38 2024 +0100
|
|
||||||
|
|
||||||
Update port TX QL when external source locks
|
|
||||||
|
|
||||||
With multiple external sources, the transmitted QL was wrong if the best
|
|
||||||
source was not selected. When an external source locks, update the
|
|
||||||
forced QL of all ports to transmit the correct QL.
|
|
||||||
|
|
||||||
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
|
|
||||||
diff --git a/synce_dev.c b/synce_dev.c
|
|
||||||
index 70936a6..b8bfd0f 100644
|
|
||||||
--- a/synce_dev.c
|
|
||||||
+++ b/synce_dev.c
|
|
||||||
@@ -664,6 +664,10 @@ static int dev_step_dpll(struct synce_dev *dev)
|
|
||||||
dev->best_source = active;
|
|
||||||
pr_info("EEC_LOCKED/EEC_LOCKED_HO_ACQ on %s of %s",
|
|
||||||
dev->best_source->ext_src->name, dev->name);
|
|
||||||
+ LIST_FOREACH(c, &dev->clock_sources, list) {
|
|
||||||
+ if (c->type == PORT)
|
|
||||||
+ set_port_ql_from_ext_src(dev, c->port, active->ext_src);
|
|
||||||
+ }
|
|
||||||
dev_update_ql(dev);
|
|
||||||
} else if (active->type == PORT) {
|
|
||||||
dev->ext_src_is_best = 0;
|
|
||||||
|
|
||||||
commit 0d6452efc885ec30547124b4c5570f4e6039ad69
|
|
||||||
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
Date: Wed Jan 17 14:15:16 2024 +0100
|
|
||||||
|
|
||||||
Add functions for clearing priority of individual pins
|
|
||||||
|
|
||||||
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
|
|
||||||
diff --git a/dpll_mon.c b/dpll_mon.c
|
|
||||||
index 0f0648c..14e5354 100644
|
|
||||||
--- a/dpll_mon.c
|
|
||||||
+++ b/dpll_mon.c
|
|
||||||
@@ -972,7 +972,7 @@ int set_prio(struct dpll_mon *dm, uint32_t pin_id, uint32_t prio)
|
|
||||||
dm->dpll_id, prio);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int dpll_mon_pin_prio_clear(struct dpll_mon *dm, struct dpll_mon_pin *pin)
|
|
||||||
+int dpll_mon_pin_prio_clear(struct dpll_mon *dm, struct dpll_mon_pin *pin)
|
|
||||||
{
|
|
||||||
struct dpll_mon_pin *parent;
|
|
||||||
struct parent_pin *pp;
|
|
||||||
diff --git a/dpll_mon.h b/dpll_mon.h
|
|
||||||
index ec6e8b4..481b5e3 100644
|
|
||||||
--- a/dpll_mon.h
|
|
||||||
+++ b/dpll_mon.h
|
|
||||||
@@ -119,6 +119,15 @@ int dpll_mon_pin_is_active(struct dpll_mon *dm, struct dpll_mon_pin *pin);
|
|
||||||
int dpll_mon_pin_prio_set(struct dpll_mon *dm, struct dpll_mon_pin *pin,
|
|
||||||
uint32_t prio);
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * Request to reset the priority of a pin to dnu_prio.
|
|
||||||
+ *
|
|
||||||
+ * @param dm Instance of dpll mon which owns the pin.
|
|
||||||
+ * @param pin Valid pointer to a pin.
|
|
||||||
+ * @return 0 - success, negative - failed to send request
|
|
||||||
+ */
|
|
||||||
+int dpll_mon_pin_prio_clear(struct dpll_mon *dm, struct dpll_mon_pin *pin);
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* Request to set Do Not Use priority on all valid pins for all the pins
|
|
||||||
* controlled by the dpll_mon's dpll.
|
|
||||||
diff --git a/synce_clock_source.c b/synce_clock_source.c
|
|
||||||
index 16ba091..50b21b8 100644
|
|
||||||
--- a/synce_clock_source.c
|
|
||||||
+++ b/synce_clock_source.c
|
|
||||||
@@ -220,3 +220,18 @@ int synce_clock_source_prio_set(struct dpll_mon *dpll_mon,
|
|
||||||
prio);
|
|
||||||
return synce_ext_src_prio_set(dpll_mon, clk_src->ext_src, prio);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+int synce_clock_source_prio_clear(struct dpll_mon *dpll_mon,
|
|
||||||
+ struct synce_clock_source *clk_src)
|
|
||||||
+{
|
|
||||||
+ if (!clk_src) {
|
|
||||||
+ pr_err("%s clock_source is NULL", __func__);
|
|
||||||
+ return -ENODEV;
|
|
||||||
+ }
|
|
||||||
+ pr_debug("%s: clear prio on %s", __func__,
|
|
||||||
+ clk_src->type == PORT ? clk_src->port->name :
|
|
||||||
+ clk_src->ext_src->name);
|
|
||||||
+ if (clk_src->type == PORT)
|
|
||||||
+ return synce_port_prio_clear(dpll_mon, clk_src->port);
|
|
||||||
+ return synce_ext_src_prio_clear(dpll_mon, clk_src->ext_src);
|
|
||||||
+}
|
|
||||||
diff --git a/synce_clock_source.h b/synce_clock_source.h
|
|
||||||
index 80c1327..96e6d26 100644
|
|
||||||
--- a/synce_clock_source.h
|
|
||||||
+++ b/synce_clock_source.h
|
|
||||||
@@ -132,4 +132,14 @@ int synce_clock_source_prio_set(struct dpll_mon *dpll_mon,
|
|
||||||
struct synce_clock_source *clk_src,
|
|
||||||
uint32_t prio);
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * request to set priority of a clock source pin on a dpll to dnu_prio
|
|
||||||
+ *
|
|
||||||
+ * @param dpll_mon Pointer to dpll_mon class
|
|
||||||
+ * @param clk_src Configured instance
|
|
||||||
+ * @return 0 - success, error code - failure
|
|
||||||
+ */
|
|
||||||
+int synce_clock_source_prio_clear(struct dpll_mon *dpll_mon,
|
|
||||||
+ struct synce_clock_source *clk_src);
|
|
||||||
+
|
|
||||||
#endif /* HAVE_SYNCE_CLOCK_SOURCE_H */
|
|
||||||
diff --git a/synce_ext_src.c b/synce_ext_src.c
|
|
||||||
index 7d0debd..d5c94f5 100644
|
|
||||||
--- a/synce_ext_src.c
|
|
||||||
+++ b/synce_ext_src.c
|
|
||||||
@@ -204,3 +204,9 @@ int synce_ext_src_prio_set(struct dpll_mon *dpll_mon,
|
|
||||||
{
|
|
||||||
return dpll_mon_pin_prio_set(dpll_mon, ext_src->pin, prio);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+int synce_ext_src_prio_clear(struct dpll_mon *dpll_mon,
|
|
||||||
+ struct synce_ext_src *ext_src)
|
|
||||||
+{
|
|
||||||
+ return dpll_mon_pin_prio_clear(dpll_mon, ext_src->pin);
|
|
||||||
+}
|
|
||||||
diff --git a/synce_ext_src.h b/synce_ext_src.h
|
|
||||||
index 79e6773..972c254 100644
|
|
||||||
--- a/synce_ext_src.h
|
|
||||||
+++ b/synce_ext_src.h
|
|
||||||
@@ -128,4 +128,14 @@ int synce_ext_src_is_active(struct dpll_mon *dpll_mon,
|
|
||||||
int synce_ext_src_prio_set(struct dpll_mon *dpll_mon,
|
|
||||||
struct synce_ext_src *ext_src, uint32_t prio);
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * request to set priority of a external source associated pin to dnu_prio
|
|
||||||
+ *
|
|
||||||
+ * @param dpll_mon Pointer to dpll_mon class
|
|
||||||
+ * @param ext_src Configured instance
|
|
||||||
+ * @return 0 - success, error code - failure
|
|
||||||
+ */
|
|
||||||
+int synce_ext_src_prio_clear(struct dpll_mon *dpll_mon,
|
|
||||||
+ struct synce_ext_src *ext_src);
|
|
||||||
+
|
|
||||||
#endif /* HAVE_SYNCE_EXT_SRC_H */
|
|
||||||
diff --git a/synce_port.c b/synce_port.c
|
|
||||||
index 93bcee0..93a9f9f 100644
|
|
||||||
--- a/synce_port.c
|
|
||||||
+++ b/synce_port.c
|
|
||||||
@@ -473,3 +473,8 @@ int synce_port_prio_set(struct dpll_mon *dpll_mon, struct synce_port *port,
|
|
||||||
{
|
|
||||||
return dpll_mon_pin_prio_set(dpll_mon, port->pin, prio);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+int synce_port_prio_clear(struct dpll_mon *dpll_mon, struct synce_port *port)
|
|
||||||
+{
|
|
||||||
+ return dpll_mon_pin_prio_clear(dpll_mon, port->pin);
|
|
||||||
+}
|
|
||||||
diff --git a/synce_port.h b/synce_port.h
|
|
||||||
index 6f08976..ce07101 100644
|
|
||||||
--- a/synce_port.h
|
|
||||||
+++ b/synce_port.h
|
|
||||||
@@ -192,4 +192,13 @@ int synce_port_is_active(struct dpll_mon *dpll_mon, struct synce_port *port);
|
|
||||||
int synce_port_prio_set(struct dpll_mon *dpll_mon, struct synce_port *port,
|
|
||||||
uint32_t prio);
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * request to set priority of a port pin on a dpll to dnu_prio
|
|
||||||
+ *
|
|
||||||
+ * @param dpll_mon Pointer to dpll_mon class
|
|
||||||
+ * @param port Configured instance
|
|
||||||
+ * @return 0 - success, error code - failure
|
|
||||||
+ */
|
|
||||||
+int synce_port_prio_clear(struct dpll_mon *dpll_mon, struct synce_port *port);
|
|
||||||
+
|
|
||||||
#endif /* HAVE_SYNCE_PORT_H */
|
|
||||||
|
|
||||||
commit 977f85ac74720996733c9ecce3cd2cd545a357de
|
|
||||||
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
Date: Wed Jan 17 14:16:07 2024 +0100
|
|
||||||
|
|
||||||
Avoid disconnecting input when rebuilding priority
|
|
||||||
|
|
||||||
When rebuilding the input priority (e.g. after a change in the received
|
|
||||||
QL), avoid temporarily clearing the priority (setting to DNU) of inputs
|
|
||||||
that will still be usable for synchronization.
|
|
||||||
|
|
||||||
This avoids an unnecessary disconnect of the currently locked input
|
|
||||||
causing a change in the transmitted QL and possibly an infinite loop in
|
|
||||||
the selection of inputs if the downstream SyncE clock is selecting this
|
|
||||||
clock as its input.
|
|
||||||
|
|
||||||
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
|
|
||||||
diff --git a/synce_dev.c b/synce_dev.c
|
|
||||||
index b8bfd0f..7800508 100644
|
|
||||||
--- a/synce_dev.c
|
|
||||||
+++ b/synce_dev.c
|
|
||||||
@@ -577,13 +577,14 @@ int rebuild_inputs_prio(struct synce_dev *dev)
|
|
||||||
struct synce_clock_source *tmp, *tmp_best, **arr, *best, *prev_tmp = NULL;
|
|
||||||
int i = 0, prio_count;
|
|
||||||
|
|
||||||
- if (dpll_mon_pins_prio_dnu_set(dev->dpll_mon)) {
|
|
||||||
- pr_err("failed to set DNU priorities on %s", dev->name);
|
|
||||||
- return -EIO;
|
|
||||||
- }
|
|
||||||
best = find_dev_best_clock_source(dev);
|
|
||||||
- if (!best)
|
|
||||||
+ if (!best) {
|
|
||||||
+ if (dpll_mon_pins_prio_dnu_set(dev->dpll_mon)) {
|
|
||||||
+ pr_err("failed to set DNU priorities on %s", dev->name);
|
|
||||||
+ return -EIO;
|
|
||||||
+ }
|
|
||||||
return 0;
|
|
||||||
+ }
|
|
||||||
arr = calloc(dev->num_clock_sources, sizeof(*arr));
|
|
||||||
if (!arr)
|
|
||||||
return -ENOMEM;
|
|
||||||
@@ -620,6 +621,13 @@ int rebuild_inputs_prio(struct synce_dev *dev)
|
|
||||||
}
|
|
||||||
prio_count = i;
|
|
||||||
pr_debug("considered valid clock sources num: %d on %s", i, dev->name);
|
|
||||||
+ LIST_FOREACH(tmp, &dev->clock_sources, list) {
|
|
||||||
+ for (i = 0; i < prio_count; i++)
|
|
||||||
+ if (tmp == arr[i])
|
|
||||||
+ break;
|
|
||||||
+ if (i == prio_count)
|
|
||||||
+ synce_clock_source_prio_clear(dev->dpll_mon, tmp);
|
|
||||||
+ }
|
|
||||||
for (i = 0; i < prio_count; i++)
|
|
||||||
synce_clock_source_prio_set(dev->dpll_mon, arr[i], i);
|
|
||||||
free(arr);
|
|
133
synce4l-smc.patch
Normal file
133
synce4l-smc.patch
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
commit 6edb7f5a974c8a80f68c7b82b1bde1c1b37b75bb
|
||||||
|
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
Date: Wed Jun 5 12:55:29 2024 +0200
|
||||||
|
|
||||||
|
Change default smc_socket_path to /run/synce4l_socket
|
||||||
|
|
||||||
|
System services should use /run for sockets and other runtime files.
|
||||||
|
|
||||||
|
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/README.md b/README.md
|
||||||
|
index 87623a9..c1c1d73 100644
|
||||||
|
--- a/README.md
|
||||||
|
+++ b/README.md
|
||||||
|
@@ -125,7 +125,7 @@ related to a running synce4l instance.
|
||||||
|
| `logging_level` | `6` | `0-7` | Minimum log level required to appear in a log. |
|
||||||
|
| `message_tag` | None | string | Tag reported in a log. |
|
||||||
|
| `poll_interval_msec` | 20 | 0-500 | Sleep time between subsequent SyncE clock polls |
|
||||||
|
-| `smc_socket_path` | `/tmp/synce4l_socket` | string | Full path to socket file for external application communication |
|
||||||
|
+| `smc_socket_path` | `/run/synce4l_socket` | string | Full path to socket file for external application communication |
|
||||||
|
| `use_syslog` | `1` | `0`, `1` | Set to 1 if `syslog` should be used. |
|
||||||
|
| `verbose` | `0` | `0`, `1` | Set to 1 to log extra information. |
|
||||||
|
|
||||||
|
@@ -200,7 +200,7 @@ logging_level 7
|
||||||
|
use_syslog 0
|
||||||
|
verbose 1
|
||||||
|
message_tag [synce4l]
|
||||||
|
-smc_socket_path /tmp/synce4l_socket
|
||||||
|
+smc_socket_path /run/synce4l_socket
|
||||||
|
|
||||||
|
[<synce1>]
|
||||||
|
network_option 1
|
||||||
|
@@ -239,7 +239,7 @@ logging_level 7
|
||||||
|
use_syslog 0
|
||||||
|
verbose 1
|
||||||
|
message_tag [synce4l]
|
||||||
|
-smc_socket_path /tmp/synce4l_socket
|
||||||
|
+smc_socket_path /run/synce4l_socket
|
||||||
|
|
||||||
|
[<synce1>]
|
||||||
|
network_option 1
|
||||||
|
diff --git a/config.c b/config.c
|
||||||
|
index bb438a6..274c2d3 100644
|
||||||
|
--- a/config.c
|
||||||
|
+++ b/config.c
|
||||||
|
@@ -180,7 +180,7 @@ struct config_item config_tab_synce[] = {
|
||||||
|
GLOB_ITEM_STR("message_tag", NULL),
|
||||||
|
GLOB_ITEM_INT("poll_interval_msec", 20, CLOCK_POLL_INTERVAL_MIN,
|
||||||
|
CLOCK_POLL_INTERVAL_MAX),
|
||||||
|
- GLOB_ITEM_STR("smc_socket_path", "/tmp/synce4l_socket"),
|
||||||
|
+ GLOB_ITEM_STR("smc_socket_path", "/run/synce4l_socket"),
|
||||||
|
GLOB_ITEM_INT("use_syslog", 1, 0, 1),
|
||||||
|
GLOB_ITEM_STR("userDescription", ""),
|
||||||
|
GLOB_ITEM_INT("verbose", 0, 0, 1),
|
||||||
|
diff --git a/configs/synce4l.cfg b/configs/synce4l.cfg
|
||||||
|
index ca12e9f..de92bd1 100644
|
||||||
|
--- a/configs/synce4l.cfg
|
||||||
|
+++ b/configs/synce4l.cfg
|
||||||
|
@@ -7,7 +7,7 @@ logging_level 7
|
||||||
|
use_syslog 0
|
||||||
|
verbose 1
|
||||||
|
message_tag [synce4l]
|
||||||
|
-smc_socket_path /tmp/synce4l_socket
|
||||||
|
+smc_socket_path /run/synce4l_socket
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
diff --git a/configs/synce4l_dpll.cfg b/configs/synce4l_dpll.cfg
|
||||||
|
index b814266..db4bd88 100644
|
||||||
|
--- a/configs/synce4l_dpll.cfg
|
||||||
|
+++ b/configs/synce4l_dpll.cfg
|
||||||
|
@@ -7,7 +7,7 @@ logging_level 6
|
||||||
|
use_syslog 0
|
||||||
|
verbose 1
|
||||||
|
message_tag [synce4l]
|
||||||
|
-smc_socket_path /tmp/synce4l_socket
|
||||||
|
+smc_socket_path /run/synce4l_socket
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
|
||||||
|
commit 2f50c7a8b98d99220108abb0163696dcfed77635
|
||||||
|
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
Date: Wed Jun 5 13:05:18 2024 +0200
|
||||||
|
|
||||||
|
Check smc_socket_path length
|
||||||
|
|
||||||
|
Exit with an error message if the configured socket path is too long to
|
||||||
|
be bound as a Unix domain socket.
|
||||||
|
|
||||||
|
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/synce_manager.c b/synce_manager.c
|
||||||
|
index 598ef7e..a42b823 100644
|
||||||
|
--- a/synce_manager.c
|
||||||
|
+++ b/synce_manager.c
|
||||||
|
@@ -256,6 +256,10 @@ static void *synce_manager_server_thread(void *arg)
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (strlen(synce_clock_get_socket_path(clk)) >= sizeof(server.sun_path)) {
|
||||||
|
+ pr_err("%s smc_socket_path is too long", __func__);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
+ }
|
||||||
|
server.sun_family = AF_UNIX;
|
||||||
|
snprintf(server.sun_path, sizeof(server.sun_path), "%s",
|
||||||
|
synce_clock_get_socket_path(clk));
|
||||||
|
|
||||||
|
commit b5a9ad4f0aa1fb98e4ac060c91a08d82fe66e7d2
|
||||||
|
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
Date: Wed Jun 5 13:07:04 2024 +0200
|
||||||
|
|
||||||
|
Unlink smc_socket_path before binding
|
||||||
|
|
||||||
|
Remove the Unix domain socket if it already exists (e.g. previous
|
||||||
|
synce4l instance didn't exit cleanly) to avoid failing in the bind()
|
||||||
|
call.
|
||||||
|
|
||||||
|
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/synce_manager.c b/synce_manager.c
|
||||||
|
index a42b823..6baf18c 100644
|
||||||
|
--- a/synce_manager.c
|
||||||
|
+++ b/synce_manager.c
|
||||||
|
@@ -264,6 +264,8 @@ static void *synce_manager_server_thread(void *arg)
|
||||||
|
snprintf(server.sun_path, sizeof(server.sun_path), "%s",
|
||||||
|
synce_clock_get_socket_path(clk));
|
||||||
|
|
||||||
|
+ unlink(server.sun_path);
|
||||||
|
+
|
||||||
|
if (bind(server_fd, (struct sockaddr *)&server, sizeof(server)) < 0) {
|
||||||
|
pr_err("%s Bind failed", __func__);
|
||||||
|
exit(EXIT_FAILURE);
|
@ -1,37 +0,0 @@
|
|||||||
commit 2ae971b87f05c03bd07d0ce41db59cc522625482
|
|
||||||
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
Date: Wed Nov 8 15:15:28 2023 +0100
|
|
||||||
|
|
||||||
Avoid -Wmaybe-uninitialized warning
|
|
||||||
|
|
||||||
This fixes false positives reported by an older gcc:
|
|
||||||
|
|
||||||
In file included from dpll_mon.c:17:
|
|
||||||
dpll_mon.c: In function 'dpll_mon_pin_update':
|
|
||||||
print.h:54:17: error: 'pin_state' may be used uninitialized in this function [-Werror=maybe-uninitialized]
|
|
||||||
54 | print(l, x); \
|
|
||||||
| ^~~~~
|
|
||||||
dpll_mon.c:334:33: note: 'pin_state' was declared here
|
|
||||||
334 | uint32_t parent_pin_id, pin_state;
|
|
||||||
| ^~~~~~~~~
|
|
||||||
print.h:54:17: error: 'parent_pin_id' may be used uninitialized in this
|
|
||||||
function [-Werror=maybe-uninitialized]
|
|
||||||
54 | print(l, x); \
|
|
||||||
| ^~~~~
|
|
||||||
dpll_mon.c:334:18: note: 'parent_pin_id' was declared here
|
|
||||||
334 | uint32_t parent_pin_id, pin_state;
|
|
||||||
| ^~~~~~~~~~~~~
|
|
||||||
|
|
||||||
diff --git a/dpll_mon.c b/dpll_mon.c
|
|
||||||
index 3cc26cc..0f0648c 100644
|
|
||||||
--- a/dpll_mon.c
|
|
||||||
+++ b/dpll_mon.c
|
|
||||||
@@ -331,7 +331,7 @@ static void update_muxed_pin(struct dpll_mon *dm, uint32_t pin_id,
|
|
||||||
struct nlattr *a, int exist, int notify)
|
|
||||||
{
|
|
||||||
int parent_pin_id_valid = 0, pin_state_valid = 0, rem;
|
|
||||||
- uint32_t parent_pin_id, pin_state;
|
|
||||||
+ uint32_t parent_pin_id = 0, pin_state = 0;
|
|
||||||
struct dpll_mon_pin *pin, *parent;
|
|
||||||
struct nlattr *an;
|
|
||||||
|
|
18
synce4l.spec
18
synce4l.spec
@ -1,5 +1,5 @@
|
|||||||
Name: synce4l
|
Name: synce4l
|
||||||
Version: 1.0.0
|
Version: 1.1.0
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: SyncE implementation for Linux
|
Summary: SyncE implementation for Linux
|
||||||
|
|
||||||
@ -8,12 +8,14 @@ URL: https://github.com/intel/synce4l
|
|||||||
Source0: https://github.com/intel/synce4l/archive/%{version}/synce4l-%{version}.tar.gz
|
Source0: https://github.com/intel/synce4l/archive/%{version}/synce4l-%{version}.tar.gz
|
||||||
Source1: synce4l.service
|
Source1: synce4l.service
|
||||||
|
|
||||||
# Fix building on 32-bit archs
|
# Fix compiler warnings to avoid build failures with -Werror
|
||||||
Patch1: synce4l-32bit.patch
|
Patch1: synce4l-ccwarns.patch
|
||||||
# Fix false compiler warning
|
# Change default smc socket path and remove existing socket on start
|
||||||
Patch2: synce4l-uninit-warning.patch
|
Patch2: synce4l-smc.patch
|
||||||
# Fix various issues in handling of changes in received/transmitted QL
|
# Fix crash observed with newer E810 firmware
|
||||||
Patch3: synce4l-ql.patch
|
Patch3: synce4l-noduppin.patch
|
||||||
|
# Fix initial pin ID to not match an existing pin
|
||||||
|
Patch4: synce4l-initpinid.patch
|
||||||
|
|
||||||
BuildRequires: gcc make systemd
|
BuildRequires: gcc make systemd
|
||||||
BuildRequires: libnl3-devel
|
BuildRequires: libnl3-devel
|
||||||
@ -28,7 +30,7 @@ supported hardware by processing Ethernet Synchronization Messaging Channel
|
|||||||
(NIC).
|
(NIC).
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup
|
%autosetup -p1
|
||||||
|
|
||||||
sed \
|
sed \
|
||||||
-e 's|^\(logging_level *\)[0-7]|\16|' \
|
-e 's|^\(logging_level *\)[0-7]|\16|' \
|
||||||
|
@ -12,12 +12,15 @@ eth=eth$i
|
|||||||
|
|
||||||
tmpconf=$(mktemp)
|
tmpconf=$(mktemp)
|
||||||
|
|
||||||
sed "s/^\[ens.*\]/\[eth$i\]/" < /etc/synce4l.conf > "$tmpconf"
|
sed \
|
||||||
|
-e "s/^\[ens.*\]/\[eth$i\]/" \
|
||||||
|
-e "s|/run/synce4l_socket|/doesnotexist/synce4l_socket|" \
|
||||||
|
< /etc/synce4l.conf > "$tmpconf"
|
||||||
|
|
||||||
out=$(timeout -s 9 5 synce4l -m -q -l 7 -f "$tmpconf" 2>&1 || :)
|
out=$(timeout -s 9 5 synce4l -m -q -l 7 -f "$tmpconf" 2>&1 || :)
|
||||||
|
|
||||||
echo "$out" | grep -q "config item synce1"
|
echo "$out" | grep -q "created num_devices:"
|
||||||
echo "$out" | grep -q "dpll mon for synce1 new state"
|
echo "$out" | grep -q "synce_manager_server_thread Bind failed"
|
||||||
|
|
||||||
echo "unknownoption 1" >> "$tmpconf"
|
echo "unknownoption 1" >> "$tmpconf"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user