You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by GitBox <gi...@apache.org> on 2020/11/03 13:28:52 UTC
[GitHub] [incubator-nuttx] btashton commented on a change in pull request #2158: Linux I2C bus support in sim
btashton commented on a change in pull request #2158:
URL: https://github.com/apache/incubator-nuttx/pull/2158#discussion_r516072853
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
+
+#define I2C_M_RD 0x0001
+#define I2C_M_TEN 0x0010
+#define I2C_M_DMA_SAFE 0x0200
+#define I2C_M_RECV_LEN 0x0400
+#define I2C_M_NO_RD_ACK 0x0800
+#define I2C_M_IGNORE_NAK 0x1000
+#define I2C_M_REV_DIR_ADDR 0x2000
+#define I2C_M_NOSTART 0x4000
+#define I2C_M_STOP 0x8000
+
+/* Linux ioctl */
+
+#define I2C_RETRIES 0x0701
+#define I2C_TIMEOUT 0x0702
+#define I2C_SLAVE 0x0703
+#define I2C_SLAVE_FORCE 0x0706
+#define I2C_TENBIT 0x0704
+#define I2C_FUNCS 0x0705
+#define I2C_RDWR 0x0707
+#define I2C_PEC 0x0708
+#define I2C_SMBUS 0x0720
+
+/* NuttX msg flags (see i2c_master.h) */
Review comment:
I really don't want to pull that header in here, both because of the additional build requirements and side effects of the header. These are quite stable.
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
Review comment:
I really don't want to pull that header in here, both because of the additional build requirements and side effects of the header. These are quite stable.
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
+
+#define I2C_M_RD 0x0001
+#define I2C_M_TEN 0x0010
+#define I2C_M_DMA_SAFE 0x0200
+#define I2C_M_RECV_LEN 0x0400
+#define I2C_M_NO_RD_ACK 0x0800
+#define I2C_M_IGNORE_NAK 0x1000
+#define I2C_M_REV_DIR_ADDR 0x2000
+#define I2C_M_NOSTART 0x4000
+#define I2C_M_STOP 0x8000
+
+/* Linux ioctl */
+
+#define I2C_RETRIES 0x0701
+#define I2C_TIMEOUT 0x0702
+#define I2C_SLAVE 0x0703
+#define I2C_SLAVE_FORCE 0x0706
+#define I2C_TENBIT 0x0704
+#define I2C_FUNCS 0x0705
+#define I2C_RDWR 0x0707
+#define I2C_PEC 0x0708
+#define I2C_SMBUS 0x0720
+
+/* NuttX msg flags (see i2c_master.h) */
Review comment:
But the previous comment was to move them out of the header and into the C file.
##########
File path: boards/sim/sim/sim/Kconfig
##########
@@ -54,3 +54,20 @@ config SIM_WTGAHRS2_UARTN
We can select the number accoding to which SIM_UARTX_NAME is uesd to sensor.
This range is 0-4.
endif
+
+config SIM_I2CBUS
Review comment:
Seems reasonable
##########
File path: arch/sim/src/sim/up_i2cbus.c
##########
@@ -0,0 +1,153 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_i2cbus.c
Review comment:
The reason I put this here was I figured that if another I2C bus implementor was here like libhid that this would resolve the mapping.
I can move it out it just means only supporting one at a time.
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
+
+#define I2C_M_RD 0x0001
+#define I2C_M_TEN 0x0010
+#define I2C_M_DMA_SAFE 0x0200
+#define I2C_M_RECV_LEN 0x0400
+#define I2C_M_NO_RD_ACK 0x0800
+#define I2C_M_IGNORE_NAK 0x1000
+#define I2C_M_REV_DIR_ADDR 0x2000
+#define I2C_M_NOSTART 0x4000
+#define I2C_M_STOP 0x8000
+
+/* Linux ioctl */
+
+#define I2C_RETRIES 0x0701
+#define I2C_TIMEOUT 0x0702
+#define I2C_SLAVE 0x0703
+#define I2C_SLAVE_FORCE 0x0706
+#define I2C_TENBIT 0x0704
+#define I2C_FUNCS 0x0705
+#define I2C_RDWR 0x0707
+#define I2C_PEC 0x0708
+#define I2C_SMBUS 0x0720
+
+/* NuttX msg flags (see i2c_master.h) */
Review comment:
I'm fine doing that but I need to change the naming of the NuttX or Linux flags since there is conflict. If I put the NuttX ones in a common place I feel like we should still prefix them so that we don't have conflicts against host naming. Does that make sense?
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
Review comment:
We can try, I have just had issues in the past with kernel headers causing side effects. I have gone back and forth, but since it is an advanced feature the extra requirement is not that bad long as it still works. .
##########
File path: arch/sim/src/sim/up_i2cbus.c
##########
@@ -0,0 +1,153 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_i2cbus.c
Review comment:
Ok that's fine. I guess if we were to support using other userspace I2C libraries (via libftdi, libhid, etc) they could just be mapped and initialized as appropriate in the host specific bus code.
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
+
+#define I2C_M_RD 0x0001
+#define I2C_M_TEN 0x0010
+#define I2C_M_DMA_SAFE 0x0200
+#define I2C_M_RECV_LEN 0x0400
+#define I2C_M_NO_RD_ACK 0x0800
+#define I2C_M_IGNORE_NAK 0x1000
+#define I2C_M_REV_DIR_ADDR 0x2000
+#define I2C_M_NOSTART 0x4000
+#define I2C_M_STOP 0x8000
+
+/* Linux ioctl */
+
+#define I2C_RETRIES 0x0701
+#define I2C_TIMEOUT 0x0702
+#define I2C_SLAVE 0x0703
+#define I2C_SLAVE_FORCE 0x0706
+#define I2C_TENBIT 0x0704
+#define I2C_FUNCS 0x0705
+#define I2C_RDWR 0x0707
+#define I2C_PEC 0x0708
+#define I2C_SMBUS 0x0720
+
+/* NuttX msg flags (see i2c_master.h) */
Review comment:
Yeah I saw that. I don't really like that we leaked in the sim specific logic in that driver, but I also get that that driver is expected to work in the sim so I guess it is fine.
##########
File path: boards/sim/sim/sim/Kconfig
##########
@@ -54,3 +54,20 @@ config SIM_WTGAHRS2_UARTN
We can select the number accoding to which SIM_UARTX_NAME is uesd to sensor.
This range is 0-4.
endif
+
+config SIM_I2CBUS
Review comment:
Done
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
+
+#define I2C_M_RD 0x0001
+#define I2C_M_TEN 0x0010
+#define I2C_M_DMA_SAFE 0x0200
+#define I2C_M_RECV_LEN 0x0400
+#define I2C_M_NO_RD_ACK 0x0800
+#define I2C_M_IGNORE_NAK 0x1000
+#define I2C_M_REV_DIR_ADDR 0x2000
+#define I2C_M_NOSTART 0x4000
+#define I2C_M_STOP 0x8000
+
+/* Linux ioctl */
+
+#define I2C_RETRIES 0x0701
+#define I2C_TIMEOUT 0x0702
+#define I2C_SLAVE 0x0703
+#define I2C_SLAVE_FORCE 0x0706
+#define I2C_TENBIT 0x0704
+#define I2C_FUNCS 0x0705
+#define I2C_RDWR 0x0707
+#define I2C_PEC 0x0708
+#define I2C_SMBUS 0x0720
+
+/* NuttX msg flags (see i2c_master.h) */
Review comment:
Done.
There is now up_i2cbus.h that contains the NuttX structs and flags that can be used by multiple host implementations. The Linux interface stuff all comes in via included kernel headers.
##########
File path: arch/sim/src/sim/up_linuxi2cbus.c
##########
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_linuxi2cbus.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "up_linuxi2cbus.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define ERROR(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) \
+ syslog(LOG_ERR, "up_linuxi2c_host: " fmt "\n", ##__VA_ARGS__)
+#define DEBUG(fmt, ...)
+
+/* Define the Linux IOCTL interfaces again here so we do not require having
+ * the kernel headers to build this. This interface should be fairly
+ * stable so it should not cause any issues. The naming is preserved in case
+ * we want to change it in the future.
+ */
+
+/* Linux msg flags */
Review comment:
including them now.
##########
File path: arch/sim/src/sim/up_i2cbus.c
##########
@@ -0,0 +1,153 @@
+/****************************************************************************
+ * arch/sim/src/sim/up_i2cbus.c
Review comment:
Done.
##########
File path: arch/sim/Kconfig
##########
@@ -504,6 +504,21 @@ config SIM_HCISOCKET
control of the device, but is abstracted from the
physical interface which is still handled by Linux.
+config SIM_LINUXI2CBUS
Review comment:
Done
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org