* [PATCH 01/24] drm/bridge: allow optionally specifying an .owner device
2018-04-26 22:31 ` [PATCH 00/24] device link, bridge supplier <-> drm device Peter Rosin
@ 2018-04-26 22:31 ` Peter Rosin
2018-04-26 22:31 ` [PATCH 19/24] drm/msm: specify the .owner of the bridges Peter Rosin
` (5 subsequent siblings)
6 siblings, 0 replies; 20+ messages in thread
From: Peter Rosin @ 2018-04-26 22:31 UTC (permalink / raw)
To: linux-kernel
Cc: Peter Rosin, Archit Taneja, Andrzej Hajda, Laurent Pinchart,
David Airlie, Peter Senna Tschudin, Martin Donnelly, Martyn Welch,
Gustavo Padovan, Maarten Lankhorst, Sean Paul, Inki Dae,
Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, Kukjin Kim,
Krzysztof Kozlowski, CK Hu, Philipp Zabel
Bridge drivers can now (temporarily, in a transition phase) select if
they want to provide a full owner or keep just providing an of_node.
By providing a full owner device, the bridge drivers no longer need
to provide an of_node since that node is available via the owner
device.
When all bridge drivers provide an owner device, that will become
mandatory and the .of_node member will be removed.
Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/gpu/drm/drm_bridge.c | 3 ++-
include/drm/drm_bridge.h | 2 ++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 1638bfe9627c..67147673fdeb 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -365,7 +365,8 @@ struct drm_bridge *of_drm_find_bridge(struct device_node *np)
mutex_lock(&bridge_lock);
list_for_each_entry(bridge, &bridge_list, list) {
- if (bridge->of_node == np) {
+ if ((bridge->owner && bridge->owner->of_node == np) ||
+ bridge->of_node == np) {
mutex_unlock(&bridge_lock);
return bridge;
}
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 3270fec46979..c28a75ad0ae2 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -254,6 +254,7 @@ struct drm_bridge_timings {
/**
* struct drm_bridge - central DRM bridge control structure
+ * @owner: device that owns the bridge
* @dev: DRM device this bridge belongs to
* @encoder: encoder to which this bridge is connected
* @next: the next bridge in the encoder chain
@@ -265,6 +266,7 @@ struct drm_bridge_timings {
* @driver_private: pointer to the bridge driver's internal context
*/
struct drm_bridge {
+ struct device *owner;
struct drm_device *dev;
struct drm_encoder *encoder;
struct drm_bridge *next;
--
2.11.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH 19/24] drm/msm: specify the .owner of the bridges
2018-04-26 22:31 ` [PATCH 00/24] device link, bridge supplier <-> drm device Peter Rosin
2018-04-26 22:31 ` [PATCH 01/24] drm/bridge: allow optionally specifying an .owner device Peter Rosin
@ 2018-04-26 22:31 ` Peter Rosin
2018-04-26 22:31 ` [PATCH 22/24] drm/bridge: remove the .of_node member Peter Rosin
` (4 subsequent siblings)
6 siblings, 0 replies; 20+ messages in thread
From: Peter Rosin @ 2018-04-26 22:31 UTC (permalink / raw)
To: linux-kernel
Cc: Peter Rosin, Rob Clark, David Airlie, Shawn Guo, Lloyd Atkinson,
Neil Armstrong, Maarten Lankhorst, Jyri Sarha, linux-arm-msm,
dri-devel, freedreno
This will become mandatory.
Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/gpu/drm/msm/dsi/dsi_manager.c | 1 +
drivers/gpu/drm/msm/edp/edp_bridge.c | 1 +
drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 1 +
3 files changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
index 4cb1cb68878b..b6c344bce75d 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
@@ -710,6 +710,7 @@ struct drm_bridge *msm_dsi_manager_bridge_init(u8 id)
encoder = msm_dsi->encoder;
bridge = &dsi_bridge->base;
+ bridge->owner = msm_dsi->dev->dev;
bridge->funcs = &dsi_mgr_bridge_funcs;
ret = drm_bridge_attach(encoder, bridge, NULL);
diff --git a/drivers/gpu/drm/msm/edp/edp_bridge.c b/drivers/gpu/drm/msm/edp/edp_bridge.c
index 931a5c97cccf..30d9e0add9fe 100644
--- a/drivers/gpu/drm/msm/edp/edp_bridge.c
+++ b/drivers/gpu/drm/msm/edp/edp_bridge.c
@@ -104,6 +104,7 @@ struct drm_bridge *msm_edp_bridge_init(struct msm_edp *edp)
edp_bridge->edp = edp;
bridge = &edp_bridge->base;
+ bridge->owner = edp->dev->dev;
bridge->funcs = &edp_bridge_funcs;
ret = drm_bridge_attach(edp->encoder, bridge, NULL);
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
index 7e357077ed26..6fb103d91956 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
@@ -293,6 +293,7 @@ struct drm_bridge *msm_hdmi_bridge_init(struct hdmi *hdmi)
hdmi_bridge->hdmi = hdmi;
bridge = &hdmi_bridge->base;
+ bridge->owner = hdmi->dev->dev;
bridge->funcs = &msm_hdmi_bridge_funcs;
ret = drm_bridge_attach(hdmi->encoder, bridge, NULL);
--
2.11.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH 22/24] drm/bridge: remove the .of_node member
2018-04-26 22:31 ` [PATCH 00/24] device link, bridge supplier <-> drm device Peter Rosin
2018-04-26 22:31 ` [PATCH 01/24] drm/bridge: allow optionally specifying an .owner device Peter Rosin
2018-04-26 22:31 ` [PATCH 19/24] drm/msm: specify the .owner of the bridges Peter Rosin
@ 2018-04-26 22:31 ` Peter Rosin
[not found] ` <20180426223139.16740-23-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
2018-04-26 22:31 ` [PATCH 23/24] drm/bridge: require the .owner to be filled in on drm_bridge_attach Peter Rosin
` (3 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Peter Rosin @ 2018-04-26 22:31 UTC (permalink / raw)
To: linux-kernel
Cc: Peter Rosin, Archit Taneja, Andrzej Hajda, Laurent Pinchart,
David Airlie, Peter Senna Tschudin, Martin Donnelly, Martyn Welch,
Gustavo Padovan, Maarten Lankhorst, Sean Paul, Inki Dae,
Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, Kukjin Kim,
Krzysztof Kozlowski, CK Hu, Philipp Zabel
It is unused.
Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/gpu/drm/drm_bridge.c | 3 +--
include/drm/drm_bridge.h | 4 ----
2 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 67147673fdeb..9f023bd84d56 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -365,8 +365,7 @@ struct drm_bridge *of_drm_find_bridge(struct device_node *np)
mutex_lock(&bridge_lock);
list_for_each_entry(bridge, &bridge_list, list) {
- if ((bridge->owner && bridge->owner->of_node == np) ||
- bridge->of_node == np) {
+ if (bridge->owner->of_node == np) {
mutex_unlock(&bridge_lock);
return bridge;
}
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index c28a75ad0ae2..3bc659f3e7d2 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -258,7 +258,6 @@ struct drm_bridge_timings {
* @dev: DRM device this bridge belongs to
* @encoder: encoder to which this bridge is connected
* @next: the next bridge in the encoder chain
- * @of_node: device node pointer to the bridge
* @list: to keep track of all added bridges
* @timings: the timing specification for the bridge, if any (may
* be NULL)
@@ -270,9 +269,6 @@ struct drm_bridge {
struct drm_device *dev;
struct drm_encoder *encoder;
struct drm_bridge *next;
-#ifdef CONFIG_OF
- struct device_node *of_node;
-#endif
struct list_head list;
const struct drm_bridge_timings *timings;
--
2.11.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH 23/24] drm/bridge: require the .owner to be filled in on drm_bridge_attach
2018-04-26 22:31 ` [PATCH 00/24] device link, bridge supplier <-> drm device Peter Rosin
` (2 preceding siblings ...)
2018-04-26 22:31 ` [PATCH 22/24] drm/bridge: remove the .of_node member Peter Rosin
@ 2018-04-26 22:31 ` Peter Rosin
[not found] ` <20180426223139.16740-24-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
2018-04-26 22:31 ` [PATCH 24/24] drm/bridge: establish a link between the bridge supplier and consumer Peter Rosin
` (2 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Peter Rosin @ 2018-04-26 22:31 UTC (permalink / raw)
To: linux-kernel
Cc: Peter Rosin, Archit Taneja, Andrzej Hajda, Laurent Pinchart,
David Airlie, Peter Senna Tschudin, Martin Donnelly, Martyn Welch,
Gustavo Padovan, Maarten Lankhorst, Sean Paul, Inki Dae,
Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, Kukjin Kim,
Krzysztof Kozlowski, CK Hu, Philipp Zabel
The .owner will be handy to have around.
Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/gpu/drm/drm_bridge.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 9f023bd84d56..a038da696802 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -115,6 +115,9 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
if (!encoder || !bridge)
return -EINVAL;
+ if (WARN_ON(!bridge->owner))
+ return -EINVAL;
+
if (previous && (!previous->dev || previous->encoder != encoder))
return -EINVAL;
--
2.11.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH 24/24] drm/bridge: establish a link between the bridge supplier and consumer
2018-04-26 22:31 ` [PATCH 00/24] device link, bridge supplier <-> drm device Peter Rosin
` (3 preceding siblings ...)
2018-04-26 22:31 ` [PATCH 23/24] drm/bridge: require the .owner to be filled in on drm_bridge_attach Peter Rosin
@ 2018-04-26 22:31 ` Peter Rosin
[not found] ` <20180426223139.16740-25-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
[not found] ` <20180426223139.16740-1-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
2018-04-27 7:11 ` Andrzej Hajda
6 siblings, 1 reply; 20+ messages in thread
From: Peter Rosin @ 2018-04-26 22:31 UTC (permalink / raw)
To: linux-kernel
Cc: Peter Rosin, Archit Taneja, Andrzej Hajda, Laurent Pinchart,
David Airlie, Peter Senna Tschudin, Martin Donnelly, Martyn Welch,
Gustavo Padovan, Maarten Lankhorst, Sean Paul, Inki Dae,
Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, Kukjin Kim,
Krzysztof Kozlowski, CK Hu, Philipp Zabel
If the bridge supplier is unbound, this will bring the bridge consumer
down along with the bridge. Thus, there will no longer linger any
dangling pointers from the bridge consumer (the drm_device) to some
non-existent bridge supplier.
Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/gpu/drm/drm_bridge.c | 18 ++++++++++++++++++
include/drm/drm_bridge.h | 2 ++
2 files changed, 20 insertions(+)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index a038da696802..f0c79043ec43 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -26,6 +26,7 @@
#include <linux/mutex.h>
#include <drm/drm_bridge.h>
+#include <drm/drm_device.h>
#include <drm/drm_encoder.h>
#include "drm_crtc_internal.h"
@@ -124,12 +125,25 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
if (bridge->dev)
return -EBUSY;
+ if (encoder->dev->dev != bridge->owner) {
+ bridge->link = device_link_add(encoder->dev->dev,
+ bridge->owner, 0);
+ if (!bridge->link) {
+ dev_err(bridge->owner, "failed to link bridge to %s\n",
+ dev_name(encoder->dev->dev));
+ return -EINVAL;
+ }
+ }
+
bridge->dev = encoder->dev;
bridge->encoder = encoder;
if (bridge->funcs->attach) {
ret = bridge->funcs->attach(bridge);
if (ret < 0) {
+ if (bridge->link)
+ device_link_del(bridge->link);
+ bridge->link = NULL;
bridge->dev = NULL;
bridge->encoder = NULL;
return ret;
@@ -156,6 +170,10 @@ void drm_bridge_detach(struct drm_bridge *bridge)
if (bridge->funcs->detach)
bridge->funcs->detach(bridge);
+ if (bridge->link)
+ device_link_del(bridge->link);
+ bridge->link = NULL;
+
bridge->dev = NULL;
}
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 3bc659f3e7d2..9a386559a41a 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -261,6 +261,7 @@ struct drm_bridge_timings {
* @list: to keep track of all added bridges
* @timings: the timing specification for the bridge, if any (may
* be NULL)
+ * @link: drm consumer <-> bridge supplier
* @funcs: control functions
* @driver_private: pointer to the bridge driver's internal context
*/
@@ -271,6 +272,7 @@ struct drm_bridge {
struct drm_bridge *next;
struct list_head list;
const struct drm_bridge_timings *timings;
+ struct device_link *link;
const struct drm_bridge_funcs *funcs;
void *driver_private;
--
2.11.0
^ permalink raw reply related [flat|nested] 20+ messages in thread[parent not found: <20180426223139.16740-1-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>]
* Re: [PATCH 00/24] device link, bridge supplier <-> drm device
[not found] ` <20180426223139.16740-1-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
@ 2018-04-26 22:40 ` Laurent Pinchart
2018-04-26 23:09 ` Peter Rosin
2018-04-30 15:18 ` Daniel Vetter
0 siblings, 2 replies; 20+ messages in thread
From: Laurent Pinchart @ 2018-04-26 22:40 UTC (permalink / raw)
To: Peter Rosin
Cc: Martyn Welch, David Airlie, Gustavo Padovan,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Andrzej Hajda,
linux-samsung-soc-u79uwXL29Tb/PtFMR13I2A, Benjamin Gaignard,
Archit Taneja, Joonyoung Shim, Kyungmin Park, Krzysztof Kozlowski,
Kukjin Kim, Peter Senna Tschudin, CK Hu, Martin Donnelly,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Maarten Lankhorst,
Jyri Sarha, Inki Dae, Sean Paul, el.org-CC+yJ3UmIYqDUpFQwHEjaQ,
Matthias Brugger, Vincent Abriou
Hi Peter,
Thank you for the patches.
On Friday, 27 April 2018 01:31:15 EEST Peter Rosin wrote:
> Hi!
>
> It was noted by Russel King [1] that bridges (not using components)
> might disappear unexpectedly if the owner of the bridge was unbound.
> Jyri Sarha had previously noted the same thing with panels [2]. Jyri
> came up with using device links to resolve the panel issue, which
> was also my (independent) reaction to the note from Russel.
>
> This series builds up to the addition of that link in the last
> patch, but in my opinion the other 23 patches do have merit on their
> own.
>
> The last patch needs testing, while the others look trivial. That
> said, I might have missed some subtlety.
I don't think this is the way to go. We have a real lifetime management
problem with bridges, and device links are just trying to hide the problem
under the carpet. They will further corner us by making a real fix much more
difficult to implement. I'll try to comment further in the next few days on
what I think a better solution would be, but in a nutshell I believe that
drm_bridge objects need to be refcounted, with a .release() operation to free
the bridge resources when the reference count drops to zero. This shouldn't be
difficult to implement and I'm willing to help.
> [1] https://lkml.org/lkml/2018/4/23/769
> [2] https://www.spinics.net/lists/dri-devel/msg174275.html
>
> Peter Rosin (24):
> drm/bridge: allow optionally specifying an .owner device
> drm/bridge: adv7511: provide an .owner device
> drm/bridge/analogix: core: specify the .owner of the bridge
> drm/bridge: analogix-anx78xx: provide an .owner device
> drm/bridge: vga-dac: provide an .owner device
> drm/bridge: lvds-encoder: provide an .owner device
> drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: provide an .owner device
> drm/bridge: nxp-ptn3460: provide an .owner device
> drm/bridge: panel: provide an .owner device
> drm/bridge: ps8622: provide an .owner device
> drm/bridge: sii902x: provide an .owner device
> drm/bridge: sii9234: provide an .owner device
> drm/bridge: sii8620: provide an .owner device
> drm/bridge: synopsys: provide an .owner device for the bridges
> drm/bridge: tc358767: provide an .owner device
> drm/bridge: ti-tfp410: provide an .owner device
> drm/exynos: mic: provide an .owner device for the bridge
> drm/mediatek: hdmi: provide an .owner device for the bridge
> drm/msm: specify the .owner of the bridges
> drm/rcar-du: lvds: provide an .owner device for the bridge
> drm/sti: provide an .owner device for the bridges
> drm/bridge: remove the .of_node member
> drm/bridge: require the .owner to be filled in on drm_bridge_attach
> drm/bridge: establish a link between the bridge supplier and consumer
>
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 2 +-
> drivers/gpu/drm/bridge/analogix-anx78xx.c | 5 +----
> drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 1 +
> drivers/gpu/drm/bridge/dumb-vga-dac.c | 2 +-
> drivers/gpu/drm/bridge/lvds-encoder.c | 2 +-
> .../drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 2 +-
> drivers/gpu/drm/bridge/nxp-ptn3460.c | 2 +-
> drivers/gpu/drm/bridge/panel.c | 4 +---
> drivers/gpu/drm/bridge/parade-ps8622.c | 2 +-
> drivers/gpu/drm/bridge/sii902x.c | 2 +-
> drivers/gpu/drm/bridge/sii9234.c | 2 +-
> drivers/gpu/drm/bridge/sil-sii8620.c | 2 +-
> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 4 +---
> drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 4 +---
> drivers/gpu/drm/bridge/tc358767.c | 2 +-
> drivers/gpu/drm/bridge/ti-tfp410.c | 2 +-
> drivers/gpu/drm/drm_bridge.c | 23 ++++++++++++++++++-
> drivers/gpu/drm/exynos/exynos_drm_mic.c | 2 +-
> drivers/gpu/drm/mediatek/mtk_hdmi.c | 2 +-
> drivers/gpu/drm/msm/dsi/dsi_manager.c | 1 +
> drivers/gpu/drm/msm/edp/edp_bridge.c | 1 +
> drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 1 +
> drivers/gpu/drm/rcar-du/rcar_lvds.c | 2 +-
> drivers/gpu/drm/sti/sti_dvo.c | 2 +-
> drivers/gpu/drm/sti/sti_hda.c | 1 +
> drivers/gpu/drm/sti/sti_hdmi.c | 1 +
> include/drm/drm_bridge.h | 8 ++++----
> 27 files changed, 51 insertions(+), 33 deletions(-)
--
Regards,
Laurent Pinchart
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [PATCH 00/24] device link, bridge supplier <-> drm device
2018-04-26 22:40 ` [PATCH 00/24] device link, bridge supplier <-> drm device Laurent Pinchart
@ 2018-04-26 23:09 ` Peter Rosin
2018-04-26 23:18 ` Laurent Pinchart
2018-04-30 15:18 ` Daniel Vetter
1 sibling, 1 reply; 20+ messages in thread
From: Peter Rosin @ 2018-04-26 23:09 UTC (permalink / raw)
To: Laurent Pinchart
Cc: linux-kernel, Archit Taneja, Andrzej Hajda, David Airlie,
Peter Senna Tschudin, Martin Donnelly, Martyn Welch,
Gustavo Padovan, Maarten Lankhorst, Sean Paul, Inki Dae,
Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, Kukjin Kim,
Krzysztof Kozlowski, CK Hu, Philipp Zabel, Matthias Brugger
On 2018-04-27 00:40, Laurent Pinchart wrote:
> Hi Peter,
>
> Thank you for the patches.
>
> On Friday, 27 April 2018 01:31:15 EEST Peter Rosin wrote:
>> Hi!
>>
>> It was noted by Russel King [1] that bridges (not using components)
>> might disappear unexpectedly if the owner of the bridge was unbound.
>> Jyri Sarha had previously noted the same thing with panels [2]. Jyri
>> came up with using device links to resolve the panel issue, which
>> was also my (independent) reaction to the note from Russel.
>>
>> This series builds up to the addition of that link in the last
>> patch, but in my opinion the other 23 patches do have merit on their
>> own.
>>
>> The last patch needs testing, while the others look trivial. That
>> said, I might have missed some subtlety.
>
> I don't think this is the way to go. We have a real lifetime management
> problem with bridges, and device links are just trying to hide the problem
> under the carpet. They will further corner us by making a real fix much more
> difficult to implement. I'll try to comment further in the next few days on
> what I think a better solution would be, but in a nutshell I believe that
> drm_bridge objects need to be refcounted, with a .release() operation to free
> the bridge resources when the reference count drops to zero. This shouldn't be
> difficult to implement and I'm willing to help.
Ok, sp 24/24 is dead, and maybe 23/24 too. But how do you feel about dropping
.of_node in favour of .owner? That gets rid of ugly #ifdefs...
I also have the nagging feeling that .driver_private serves very little real
purpose if there is a .owner so that you can do
dev_get_drvdata(bridge->owner)
for the cases where the container_of macro is not appropriate.
Cheers,
Peter
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 00/24] device link, bridge supplier <-> drm device
2018-04-26 23:09 ` Peter Rosin
@ 2018-04-26 23:18 ` Laurent Pinchart
2018-04-27 7:27 ` Peter Rosin
0 siblings, 1 reply; 20+ messages in thread
From: Laurent Pinchart @ 2018-04-26 23:18 UTC (permalink / raw)
To: Peter Rosin
Cc: Martyn Welch, David Airlie, dri-devel, linux-samsung-soc,
Kyungmin Park, Krzysztof Kozlowski, Kukjin Kim,
Peter Senna Tschudin, Martin Donnelly, linux-arm-msm, Jyri Sarha,
el.org, Matthias Brugger, Vincent Abriou, linux-arm-kernel,
Seung-Woo Kim, linux-kernel, linux-renesas-soc, linux-mediatek,
freedreno
Hi Peter,
On Friday, 27 April 2018 02:09:14 EEST Peter Rosin wrote:
> On 2018-04-27 00:40, Laurent Pinchart wrote:
> > On Friday, 27 April 2018 01:31:15 EEST Peter Rosin wrote:
> >> Hi!
> >>
> >> It was noted by Russel King [1] that bridges (not using components)
> >> might disappear unexpectedly if the owner of the bridge was unbound.
> >> Jyri Sarha had previously noted the same thing with panels [2]. Jyri
> >> came up with using device links to resolve the panel issue, which
> >> was also my (independent) reaction to the note from Russel.
> >>
> >> This series builds up to the addition of that link in the last
> >> patch, but in my opinion the other 23 patches do have merit on their
> >> own.
> >>
> >> The last patch needs testing, while the others look trivial. That
> >> said, I might have missed some subtlety.
> >
> > I don't think this is the way to go. We have a real lifetime management
> > problem with bridges, and device links are just trying to hide the problem
> > under the carpet. They will further corner us by making a real fix much
> > more difficult to implement. I'll try to comment further in the next few
> > days on what I think a better solution would be, but in a nutshell I
> > believe that drm_bridge objects need to be refcounted, with a .release()
> > operation to free the bridge resources when the reference count drops to
> > zero. This shouldn't be difficult to implement and I'm willing to help.
>
> Ok, sp 24/24 is dead, and maybe 23/24 too.
Not necessarily, maybe I'll get proven wrong :-) Let's discuss, but I first
need some sleep.
> But how do you feel about dropping .of_node in favour of .owner? That gets
> rid of ugly #ifdefs...
I'll review that part and reply, I have nothing against it on principle at the
moment. The more generic the code is, the better in my opinion. We just need
to make sure that the OF node we're interested in will always be .owner-
>of_node in all cases.
> I also have the nagging feeling that .driver_private serves very little real
> purpose if there is a .owner so that you can do
>
> dev_get_drvdata(bridge->owner)
>
> for the cases where the container_of macro is not appropriate.
I'll review that too, it's a good point.
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 00/24] device link, bridge supplier <-> drm device
2018-04-26 23:18 ` Laurent Pinchart
@ 2018-04-27 7:27 ` Peter Rosin
0 siblings, 0 replies; 20+ messages in thread
From: Peter Rosin @ 2018-04-27 7:27 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Martyn Welch, David Airlie, Gustavo Padovan,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Andrzej Hajda,
Benjamin Gaignard, Archit Taneja,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA, Joonyoung Shim,
Kyungmin Park, Krzysztof Kozlowski, Kukjin Kim,
Peter Senna Tschudin, CK Hu, Martin Donnelly,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Maarten Lankhorst,
Jyri Sarha, Inki Dae, Sean Paul, Matthias Brugger, Vincent Abriou,
linux-arm-kernel-IAPFreCvJWM9gwCICpdfJQ
On 2018-04-27 01:18, Laurent Pinchart wrote:
> Hi Peter,
>
> On Friday, 27 April 2018 02:09:14 EEST Peter Rosin wrote:
>> On 2018-04-27 00:40, Laurent Pinchart wrote:
>>> On Friday, 27 April 2018 01:31:15 EEST Peter Rosin wrote:
>>>> Hi!
>>>>
>>>> It was noted by Russel King [1] that bridges (not using components)
>>>> might disappear unexpectedly if the owner of the bridge was unbound.
>>>> Jyri Sarha had previously noted the same thing with panels [2]. Jyri
>>>> came up with using device links to resolve the panel issue, which
>>>> was also my (independent) reaction to the note from Russel.
>>>>
>>>> This series builds up to the addition of that link in the last
>>>> patch, but in my opinion the other 23 patches do have merit on their
>>>> own.
>>>>
>>>> The last patch needs testing, while the others look trivial. That
>>>> said, I might have missed some subtlety.
>>>
>>> I don't think this is the way to go. We have a real lifetime management
>>> problem with bridges, and device links are just trying to hide the problem
>>> under the carpet. They will further corner us by making a real fix much
>>> more difficult to implement. I'll try to comment further in the next few
>>> days on what I think a better solution would be, but in a nutshell I
>>> believe that drm_bridge objects need to be refcounted, with a .release()
>>> operation to free the bridge resources when the reference count drops to
>>> zero. This shouldn't be difficult to implement and I'm willing to help.
>>
>> Ok, sp 24/24 is dead, and maybe 23/24 too.
>
> Not necessarily, maybe I'll get proven wrong :-) Let's discuss, but I first
> need some sleep.
Ok, I'll add my view...
I don't see how a refcount is going to resolve anything. Let's take some
device that allocs a bridge that is later attached to some encoder. In doing
so it adds hooks to some of the drm_bridge_funcs. If you add a refcount to
the bridge itself then yes, the bridge object might remain but the code
backing the hook functions will go away the moment the owner device goes
away. So, you'd have to refcount the owner device itself to prevent it
from going away. But, you can't stop a device from going away IIUC, you can
only bring other stuff down with it in an orderly fashion.
Components, that some bridges use, takes care of bringing the whole cluster
down *before* any device goes away, so that is obviously a solution. But
that solution is not in place everywhere.
Now, my device-link is pretty light-weight. And it should only matter if
the owner goes away before the consuming drm device has brought down the
encoder properly. If that ever happens, we're in trouble. So, the link can
at worst only substitute one problem with another, and at best it prevents
the fireworks.
Sure, there's the reprobe problem if the bridge's owner device shows up
again, but that's pretty minor compared to a hard crash. And there was a
patch for that, so in the end that may be a non-issue.
If some other solution is found, removing the device-link is trivial. It is
localized to bridge attach/detach and nothing else is affected (in terms of
code).
Cheers,
Peter
>> But how do you feel about dropping .of_node in favour of .owner? That gets
>> rid of ugly #ifdefs...
>
> I'll review that part and reply, I have nothing against it on principle at the
> moment. The more generic the code is, the better in my opinion. We just need
> to make sure that the OF node we're interested in will always be .owner-
>> of_node in all cases.
>
>> I also have the nagging feeling that .driver_private serves very little real
>> purpose if there is a .owner so that you can do
>>
>> dev_get_drvdata(bridge->owner)
>>
>> for the cases where the container_of macro is not appropriate.
>
> I'll review that too, it's a good point.
>
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 00/24] device link, bridge supplier <-> drm device
2018-04-26 22:40 ` [PATCH 00/24] device link, bridge supplier <-> drm device Laurent Pinchart
2018-04-26 23:09 ` Peter Rosin
@ 2018-04-30 15:18 ` Daniel Vetter
1 sibling, 0 replies; 20+ messages in thread
From: Daniel Vetter @ 2018-04-30 15:18 UTC (permalink / raw)
To: Laurent Pinchart
Cc: freedreno, Krzysztof Kozlowski, Martyn Welch, David Airlie,
linux-arm-msm, Jyri Sarha, linux-kernel, linux-samsung-soc,
linux-renesas-soc, Seung-Woo Kim, Kyungmin Park, Kukjin Kim,
Peter Senna Tschudin, dri-devel, Matthias Brugger, linux-mediatek,
el.org, Vincent Abriou, Peter Rosin, linux-arm-kernel,
Martin Donnelly
On Fri, Apr 27, 2018 at 01:40:21AM +0300, Laurent Pinchart wrote:
> Hi Peter,
>
> Thank you for the patches.
>
> On Friday, 27 April 2018 01:31:15 EEST Peter Rosin wrote:
> > Hi!
> >
> > It was noted by Russel King [1] that bridges (not using components)
> > might disappear unexpectedly if the owner of the bridge was unbound.
> > Jyri Sarha had previously noted the same thing with panels [2]. Jyri
> > came up with using device links to resolve the panel issue, which
> > was also my (independent) reaction to the note from Russel.
> >
> > This series builds up to the addition of that link in the last
> > patch, but in my opinion the other 23 patches do have merit on their
> > own.
> >
> > The last patch needs testing, while the others look trivial. That
> > said, I might have missed some subtlety.
>
> I don't think this is the way to go. We have a real lifetime management
> problem with bridges, and device links are just trying to hide the problem
> under the carpet. They will further corner us by making a real fix much more
> difficult to implement. I'll try to comment further in the next few days on
> what I think a better solution would be, but in a nutshell I believe that
> drm_bridge objects need to be refcounted, with a .release() operation to free
> the bridge resources when the reference count drops to zero. This shouldn't be
> difficult to implement and I'm willing to help.
I agree that refcounting is the proper fix if bridges can be
hot-unplugged, independently of the overall drm_device.
And yes retro-shoehorning refcounting is "fun", but it's also not
impossible. I've done it a few times by now in drm.
Otoh, refcounting has a pretty serious cost - we're still blowing up
drm_framebuffer refcounting in corner cases at shocking regularity, and
that's something that's been refcounted for years by now. As long as we
don't have a clearly defined need to make bridges hotpluggable then I
think not paying the hefty bill just yet is the correct technical
decision. This patch series here looks like a reasonable way to tie the
lifetimes together a bit more closely and should fix the bugs we have
right now.
Cheers, Daniel
PS: Yes there's cases where you can hotplug display blocks on a SoC. To my
knowledge they're all covered by hotplugging the entire drm_device (plus
all the statically associated bits like drm_bridge/crtc/plane/encoder).
And we're already working on fixing up drm_device to at least make it
possible to write a correct hot-unpluggable driver in theory. We'll see
whether anyone manages to pull that off in practice :-)
>
> > [1] https://lkml.org/lkml/2018/4/23/769
> > [2] https://www.spinics.net/lists/dri-devel/msg174275.html
> >
> > Peter Rosin (24):
> > drm/bridge: allow optionally specifying an .owner device
> > drm/bridge: adv7511: provide an .owner device
> > drm/bridge/analogix: core: specify the .owner of the bridge
> > drm/bridge: analogix-anx78xx: provide an .owner device
> > drm/bridge: vga-dac: provide an .owner device
> > drm/bridge: lvds-encoder: provide an .owner device
> > drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: provide an .owner device
> > drm/bridge: nxp-ptn3460: provide an .owner device
> > drm/bridge: panel: provide an .owner device
> > drm/bridge: ps8622: provide an .owner device
> > drm/bridge: sii902x: provide an .owner device
> > drm/bridge: sii9234: provide an .owner device
> > drm/bridge: sii8620: provide an .owner device
> > drm/bridge: synopsys: provide an .owner device for the bridges
> > drm/bridge: tc358767: provide an .owner device
> > drm/bridge: ti-tfp410: provide an .owner device
> > drm/exynos: mic: provide an .owner device for the bridge
> > drm/mediatek: hdmi: provide an .owner device for the bridge
> > drm/msm: specify the .owner of the bridges
> > drm/rcar-du: lvds: provide an .owner device for the bridge
> > drm/sti: provide an .owner device for the bridges
> > drm/bridge: remove the .of_node member
> > drm/bridge: require the .owner to be filled in on drm_bridge_attach
> > drm/bridge: establish a link between the bridge supplier and consumer
> >
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 2 +-
> > drivers/gpu/drm/bridge/analogix-anx78xx.c | 5 +----
> > drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 1 +
> > drivers/gpu/drm/bridge/dumb-vga-dac.c | 2 +-
> > drivers/gpu/drm/bridge/lvds-encoder.c | 2 +-
> > .../drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 2 +-
> > drivers/gpu/drm/bridge/nxp-ptn3460.c | 2 +-
> > drivers/gpu/drm/bridge/panel.c | 4 +---
> > drivers/gpu/drm/bridge/parade-ps8622.c | 2 +-
> > drivers/gpu/drm/bridge/sii902x.c | 2 +-
> > drivers/gpu/drm/bridge/sii9234.c | 2 +-
> > drivers/gpu/drm/bridge/sil-sii8620.c | 2 +-
> > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 4 +---
> > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 4 +---
> > drivers/gpu/drm/bridge/tc358767.c | 2 +-
> > drivers/gpu/drm/bridge/ti-tfp410.c | 2 +-
> > drivers/gpu/drm/drm_bridge.c | 23 ++++++++++++++++++-
> > drivers/gpu/drm/exynos/exynos_drm_mic.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_hdmi.c | 2 +-
> > drivers/gpu/drm/msm/dsi/dsi_manager.c | 1 +
> > drivers/gpu/drm/msm/edp/edp_bridge.c | 1 +
> > drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 1 +
> > drivers/gpu/drm/rcar-du/rcar_lvds.c | 2 +-
> > drivers/gpu/drm/sti/sti_dvo.c | 2 +-
> > drivers/gpu/drm/sti/sti_hda.c | 1 +
> > drivers/gpu/drm/sti/sti_hdmi.c | 1 +
> > include/drm/drm_bridge.h | 8 ++++----
> > 27 files changed, 51 insertions(+), 33 deletions(-)
>
>
> --
> Regards,
>
> Laurent Pinchart
>
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 00/24] device link, bridge supplier <-> drm device
2018-04-26 22:31 ` [PATCH 00/24] device link, bridge supplier <-> drm device Peter Rosin
` (5 preceding siblings ...)
[not found] ` <20180426223139.16740-1-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
@ 2018-04-27 7:11 ` Andrzej Hajda
2018-04-27 7:37 ` Peter Rosin
6 siblings, 1 reply; 20+ messages in thread
From: Andrzej Hajda @ 2018-04-27 7:11 UTC (permalink / raw)
To: Peter Rosin, linux-kernel
Cc: Martyn Welch, David Airlie, dri-devel, Laurent Pinchart,
linux-samsung-soc, Kyungmin Park, Krzysztof Kozlowski, Kukjin Kim,
Peter Senna Tschudin, Martin Donnelly, linux-arm-msm, Jyri Sarha,
Matthias Brugger, Vincent Abriou, linux-arm-kernel, Seung-Woo Kim,
linux-renesas-soc, linux-mediatek, freedreno
Hi Peter,
On 27.04.2018 00:31, Peter Rosin wrote:
> Hi!
>
> It was noted by Russel King [1] that bridges (not using components)
> might disappear unexpectedly if the owner of the bridge was unbound.
> Jyri Sarha had previously noted the same thing with panels [2]. Jyri
> came up with using device links to resolve the panel issue, which
> was also my (independent) reaction to the note from Russel.
>
> This series builds up to the addition of that link in the last
> patch, but in my opinion the other 23 patches do have merit on their
> own.
>
> The last patch needs testing, while the others look trivial. That
> said, I might have missed some subtlety.
of_node is used as an identifier of the bridge in the kernel. If you
replace it with device pointer there will be potential problem with
devices having two or more bridges, how do you differentiate bridges if
the owner is the same? If I remember correctly current bridge code does
not allow to have multiple bridges in one device, but that should be
quite easy to fix if necessary. After this change it will become more
difficult.
Anyway I remember discussion that in DT world bridge should be
identified rather by of_graph port node, not by parent node as it is
now. If you want to translate this relation to device owner, you should
add also port number to have full identification of the bridge, ie pair
(owner, port_number) would be equivalent of port node.
Regards
Andrzej
>
> Cheers,
> Peter
>
> [1] https://lkml.org/lkml/2018/4/23/769
> [2] https://www.spinics.net/lists/dri-devel/msg174275.html
>
> Peter Rosin (24):
> drm/bridge: allow optionally specifying an .owner device
> drm/bridge: adv7511: provide an .owner device
> drm/bridge/analogix: core: specify the .owner of the bridge
> drm/bridge: analogix-anx78xx: provide an .owner device
> drm/bridge: vga-dac: provide an .owner device
> drm/bridge: lvds-encoder: provide an .owner device
> drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: provide an .owner device
> drm/bridge: nxp-ptn3460: provide an .owner device
> drm/bridge: panel: provide an .owner device
> drm/bridge: ps8622: provide an .owner device
> drm/bridge: sii902x: provide an .owner device
> drm/bridge: sii9234: provide an .owner device
> drm/bridge: sii8620: provide an .owner device
> drm/bridge: synopsys: provide an .owner device for the bridges
> drm/bridge: tc358767: provide an .owner device
> drm/bridge: ti-tfp410: provide an .owner device
> drm/exynos: mic: provide an .owner device for the bridge
> drm/mediatek: hdmi: provide an .owner device for the bridge
> drm/msm: specify the .owner of the bridges
> drm/rcar-du: lvds: provide an .owner device for the bridge
> drm/sti: provide an .owner device for the bridges
> drm/bridge: remove the .of_node member
> drm/bridge: require the .owner to be filled in on drm_bridge_attach
> drm/bridge: establish a link between the bridge supplier and consumer
>
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 2 +-
> drivers/gpu/drm/bridge/analogix-anx78xx.c | 5 +----
> drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 1 +
> drivers/gpu/drm/bridge/dumb-vga-dac.c | 2 +-
> drivers/gpu/drm/bridge/lvds-encoder.c | 2 +-
> .../drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 2 +-
> drivers/gpu/drm/bridge/nxp-ptn3460.c | 2 +-
> drivers/gpu/drm/bridge/panel.c | 4 +---
> drivers/gpu/drm/bridge/parade-ps8622.c | 2 +-
> drivers/gpu/drm/bridge/sii902x.c | 2 +-
> drivers/gpu/drm/bridge/sii9234.c | 2 +-
> drivers/gpu/drm/bridge/sil-sii8620.c | 2 +-
> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 4 +---
> drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 4 +---
> drivers/gpu/drm/bridge/tc358767.c | 2 +-
> drivers/gpu/drm/bridge/ti-tfp410.c | 2 +-
> drivers/gpu/drm/drm_bridge.c | 23 +++++++++++++++++++++-
> drivers/gpu/drm/exynos/exynos_drm_mic.c | 2 +-
> drivers/gpu/drm/mediatek/mtk_hdmi.c | 2 +-
> drivers/gpu/drm/msm/dsi/dsi_manager.c | 1 +
> drivers/gpu/drm/msm/edp/edp_bridge.c | 1 +
> drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 1 +
> drivers/gpu/drm/rcar-du/rcar_lvds.c | 2 +-
> drivers/gpu/drm/sti/sti_dvo.c | 2 +-
> drivers/gpu/drm/sti/sti_hda.c | 1 +
> drivers/gpu/drm/sti/sti_hdmi.c | 1 +
> include/drm/drm_bridge.h | 8 ++++----
> 27 files changed, 51 insertions(+), 33 deletions(-)
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [PATCH 00/24] device link, bridge supplier <-> drm device
2018-04-27 7:11 ` Andrzej Hajda
@ 2018-04-27 7:37 ` Peter Rosin
[not found] ` <7d4bceeb-9611-cbf9-3906-fef5db88aad8-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
0 siblings, 1 reply; 20+ messages in thread
From: Peter Rosin @ 2018-04-27 7:37 UTC (permalink / raw)
To: Andrzej Hajda, linux-kernel
Cc: Martyn Welch, David Airlie, Gustavo Padovan, dri-devel,
Laurent Pinchart, Benjamin Gaignard, Archit Taneja,
linux-samsung-soc, Joonyoung Shim, Kyungmin Park,
Krzysztof Kozlowski, Kukjin Kim, CK Hu, Martin Donnelly,
linux-arm-msm, Maarten Lankhorst, Jyri Sarha, Inki Dae, Sean Paul,
Matthias Brugger, Vincent Abriou, linux-arm-kernel,
Seung-Woo Kim <sw0312.ki>
On 2018-04-27 09:11, Andrzej Hajda wrote:
> Hi Peter,
>
> On 27.04.2018 00:31, Peter Rosin wrote:
>> Hi!
>>
>> It was noted by Russel King [1] that bridges (not using components)
>> might disappear unexpectedly if the owner of the bridge was unbound.
>> Jyri Sarha had previously noted the same thing with panels [2]. Jyri
>> came up with using device links to resolve the panel issue, which
>> was also my (independent) reaction to the note from Russel.
>>
>> This series builds up to the addition of that link in the last
>> patch, but in my opinion the other 23 patches do have merit on their
>> own.
>>
>> The last patch needs testing, while the others look trivial. That
>> said, I might have missed some subtlety.
>
> of_node is used as an identifier of the bridge in the kernel. If you
> replace it with device pointer there will be potential problem with
> devices having two or more bridges, how do you differentiate bridges if
> the owner is the same? If I remember correctly current bridge code does
> not allow to have multiple bridges in one device, but that should be
> quite easy to fix if necessary. After this change it will become more
> difficult.
I don't see how it will be more difficult?
> Anyway I remember discussion that in DT world bridge should be
> identified rather by of_graph port node, not by parent node as it is
> now. If you want to translate this relation to device owner, you should
> add also port number to have full identification of the bridge, ie pair
> (owner, port_number) would be equivalent of port node.
You even state the trivial solution here, just add the port/endpoint ID
when/if it is needed. So, what is the significant difference?
Cheers,
Peter
^ permalink raw reply [flat|nested] 20+ messages in thread