public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@linaro.org>
To: oe-kbuild@lists.linux.dev, Rosen Penev <rosenp@gmail.com>,
	netdev@vger.kernel.org
Cc: lkp@intel.com, oe-kbuild-all@lists.linux.dev,
	Horatiu Vultur <horatiu.vultur@microchip.com>,
	UNGLinuxDriver@microchip.com, Andrew Lunn <andrew+netdev@lunn.ch>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net] net: lan966x: enforce phy-mode presence
Date: Tue, 9 Sep 2025 10:46:17 +0300	[thread overview]
Message-ID: <202509090831.ygWp8XHz-lkp@intel.com> (raw)
In-Reply-To: <20250904203834.3660-1-rosenp@gmail.com>

Hi Rosen,

kernel test robot noticed the following build warnings:

url:    https://github.com/intel-lab-lkp/linux/commits/Rosen-Penev/net-lan966x-enforce-phy-mode-presence/20250905-044000
base:   net/main
patch link:    https://lore.kernel.org/r/20250904203834.3660-1-rosenp%40gmail.com
patch subject: [PATCH net] net: lan966x: enforce phy-mode presence
config: microblaze-randconfig-r072-20250909 (https://download.01.org/0day-ci/archive/20250909/202509090831.ygWp8XHz-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 12.5.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202509090831.ygWp8XHz-lkp@intel.com/

smatch warnings:
drivers/net/ethernet/microchip/lan966x/lan966x_main.c:1203 lan966x_probe() warn: missing error code 'err'

vim +/err +1203 drivers/net/ethernet/microchip/lan966x/lan966x_main.c

db8bcaad539314 Horatiu Vultur     2021-11-29  1082  static int lan966x_probe(struct platform_device *pdev)
db8bcaad539314 Horatiu Vultur     2021-11-29  1083  {
db8bcaad539314 Horatiu Vultur     2021-11-29  1084  	struct fwnode_handle *ports, *portnp;
db8bcaad539314 Horatiu Vultur     2021-11-29  1085  	struct lan966x *lan966x;
e18aba8941b40b Horatiu Vultur     2021-11-29  1086  	u8 mac_addr[ETH_ALEN];
e6fa930f73a152 Michael Walle      2022-07-04  1087  	int err;
db8bcaad539314 Horatiu Vultur     2021-11-29  1088  
db8bcaad539314 Horatiu Vultur     2021-11-29  1089  	lan966x = devm_kzalloc(&pdev->dev, sizeof(*lan966x), GFP_KERNEL);
db8bcaad539314 Horatiu Vultur     2021-11-29  1090  	if (!lan966x)
db8bcaad539314 Horatiu Vultur     2021-11-29  1091  		return -ENOMEM;
db8bcaad539314 Horatiu Vultur     2021-11-29  1092  
db8bcaad539314 Horatiu Vultur     2021-11-29  1093  	platform_set_drvdata(pdev, lan966x);
db8bcaad539314 Horatiu Vultur     2021-11-29  1094  	lan966x->dev = &pdev->dev;
db8bcaad539314 Horatiu Vultur     2021-11-29  1095  
e18aba8941b40b Horatiu Vultur     2021-11-29  1096  	if (!device_get_mac_address(&pdev->dev, mac_addr)) {
e18aba8941b40b Horatiu Vultur     2021-11-29  1097  		ether_addr_copy(lan966x->base_mac, mac_addr);
e18aba8941b40b Horatiu Vultur     2021-11-29  1098  	} else {
e18aba8941b40b Horatiu Vultur     2021-11-29  1099  		pr_info("MAC addr was not set, use random MAC\n");
e18aba8941b40b Horatiu Vultur     2021-11-29  1100  		eth_random_addr(lan966x->base_mac);
e18aba8941b40b Horatiu Vultur     2021-11-29  1101  		lan966x->base_mac[5] &= 0xf0;
e18aba8941b40b Horatiu Vultur     2021-11-29  1102  	}
e18aba8941b40b Horatiu Vultur     2021-11-29  1103  
db8bcaad539314 Horatiu Vultur     2021-11-29  1104  	err = lan966x_create_targets(pdev, lan966x);
db8bcaad539314 Horatiu Vultur     2021-11-29  1105  	if (err)
db8bcaad539314 Horatiu Vultur     2021-11-29  1106  		return dev_err_probe(&pdev->dev, err,
db8bcaad539314 Horatiu Vultur     2021-11-29  1107  				     "Failed to create targets");
db8bcaad539314 Horatiu Vultur     2021-11-29  1108  
db8bcaad539314 Horatiu Vultur     2021-11-29  1109  	err = lan966x_reset_switch(lan966x);
db8bcaad539314 Horatiu Vultur     2021-11-29  1110  	if (err)
db8bcaad539314 Horatiu Vultur     2021-11-29  1111  		return dev_err_probe(&pdev->dev, err, "Reset failed");
db8bcaad539314 Horatiu Vultur     2021-11-29  1112  
e6fa930f73a152 Michael Walle      2022-07-04  1113  	lan966x->num_phys_ports = NUM_PHYS_PORTS;
db8bcaad539314 Horatiu Vultur     2021-11-29  1114  	lan966x->ports = devm_kcalloc(&pdev->dev, lan966x->num_phys_ports,
db8bcaad539314 Horatiu Vultur     2021-11-29  1115  				      sizeof(struct lan966x_port *),
db8bcaad539314 Horatiu Vultur     2021-11-29  1116  				      GFP_KERNEL);
db8bcaad539314 Horatiu Vultur     2021-11-29  1117  	if (!lan966x->ports)
db8bcaad539314 Horatiu Vultur     2021-11-29  1118  		return -ENOMEM;
db8bcaad539314 Horatiu Vultur     2021-11-29  1119  
db8bcaad539314 Horatiu Vultur     2021-11-29  1120  	/* There QS system has 32KB of memory */
db8bcaad539314 Horatiu Vultur     2021-11-29  1121  	lan966x->shared_queue_sz = LAN966X_BUFFER_MEMORY;
db8bcaad539314 Horatiu Vultur     2021-11-29  1122  
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1123  	/* set irq */
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1124  	lan966x->xtr_irq = platform_get_irq_byname(pdev, "xtr");
86b7e033d684a9 Zhu Wang           2023-08-03  1125  	if (lan966x->xtr_irq < 0)
86b7e033d684a9 Zhu Wang           2023-08-03  1126  		return lan966x->xtr_irq;
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1127  
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1128  	err = devm_request_threaded_irq(&pdev->dev, lan966x->xtr_irq, NULL,
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1129  					lan966x_xtr_irq_handler, IRQF_ONESHOT,
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1130  					"frame extraction", lan966x);
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1131  	if (err) {
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1132  		pr_err("Unable to use xtr irq");
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1133  		return -ENODEV;
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1134  	}
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1135  
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1136  	lan966x->ana_irq = platform_get_irq_byname(pdev, "ana");
40b4ac880e21d9 Li Qiong           2022-08-12  1137  	if (lan966x->ana_irq > 0) {
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1138  		err = devm_request_threaded_irq(&pdev->dev, lan966x->ana_irq, NULL,
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1139  						lan966x_ana_irq_handler, IRQF_ONESHOT,
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1140  						"ana irq", lan966x);
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1141  		if (err)
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1142  			return dev_err_probe(&pdev->dev, err, "Unable to use ana irq");
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1143  	}
5ccd66e01cbef8 Horatiu Vultur     2021-12-18  1144  
e85a96e48e3309 Horatiu Vultur     2022-01-31  1145  	lan966x->ptp_irq = platform_get_irq_byname(pdev, "ptp");
e85a96e48e3309 Horatiu Vultur     2022-01-31  1146  	if (lan966x->ptp_irq > 0) {
e85a96e48e3309 Horatiu Vultur     2022-01-31  1147  		err = devm_request_threaded_irq(&pdev->dev, lan966x->ptp_irq, NULL,
e85a96e48e3309 Horatiu Vultur     2022-01-31  1148  						lan966x_ptp_irq_handler, IRQF_ONESHOT,
e85a96e48e3309 Horatiu Vultur     2022-01-31  1149  						"ptp irq", lan966x);
e85a96e48e3309 Horatiu Vultur     2022-01-31  1150  		if (err)
e85a96e48e3309 Horatiu Vultur     2022-01-31  1151  			return dev_err_probe(&pdev->dev, err, "Unable to use ptp irq");
e85a96e48e3309 Horatiu Vultur     2022-01-31  1152  
e85a96e48e3309 Horatiu Vultur     2022-01-31  1153  		lan966x->ptp = 1;
e85a96e48e3309 Horatiu Vultur     2022-01-31  1154  	}
e85a96e48e3309 Horatiu Vultur     2022-01-31  1155  
c8349639324a79 Horatiu Vultur     2022-04-08  1156  	lan966x->fdma_irq = platform_get_irq_byname(pdev, "fdma");
c8349639324a79 Horatiu Vultur     2022-04-08  1157  	if (lan966x->fdma_irq > 0) {
c8349639324a79 Horatiu Vultur     2022-04-08  1158  		err = devm_request_irq(&pdev->dev, lan966x->fdma_irq,
c8349639324a79 Horatiu Vultur     2022-04-08  1159  				       lan966x_fdma_irq_handler, 0,
c8349639324a79 Horatiu Vultur     2022-04-08  1160  				       "fdma irq", lan966x);
c8349639324a79 Horatiu Vultur     2022-04-08  1161  		if (err)
c8349639324a79 Horatiu Vultur     2022-04-08  1162  			return dev_err_probe(&pdev->dev, err, "Unable to use fdma irq");
c8349639324a79 Horatiu Vultur     2022-04-08  1163  
c8349639324a79 Horatiu Vultur     2022-04-08  1164  		lan966x->fdma = true;
c8349639324a79 Horatiu Vultur     2022-04-08  1165  	}
c8349639324a79 Horatiu Vultur     2022-04-08  1166  
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1167  	if (lan966x->ptp) {
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1168  		lan966x->ptp_ext_irq = platform_get_irq_byname(pdev, "ptp-ext");
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1169  		if (lan966x->ptp_ext_irq > 0) {
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1170  			err = devm_request_threaded_irq(&pdev->dev,
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1171  							lan966x->ptp_ext_irq, NULL,
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1172  							lan966x_ptp_ext_irq_handler,
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1173  							IRQF_ONESHOT,
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1174  							"ptp-ext irq", lan966x);
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1175  			if (err)
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1176  				return dev_err_probe(&pdev->dev, err,
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1177  						     "Unable to use ptp-ext irq");
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1178  		}
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1179  	}
f3d8e0a9c28ba0 Horatiu Vultur     2022-04-27  1180  
925f3deb45df73 Clément Léger      2023-01-12  1181  	ports = device_get_named_child_node(&pdev->dev, "ethernet-ports");
925f3deb45df73 Clément Léger      2023-01-12  1182  	if (!ports)
925f3deb45df73 Clément Léger      2023-01-12  1183  		return dev_err_probe(&pdev->dev, -ENODEV,
925f3deb45df73 Clément Léger      2023-01-12  1184  				     "no ethernet-ports child found\n");
925f3deb45df73 Clément Léger      2023-01-12  1185  
99975ad644c783 Herve Codina       2024-05-13  1186  	lan966x->debugfs_root = debugfs_create_dir("lan966x", NULL);
99975ad644c783 Herve Codina       2024-05-13  1187  
db8bcaad539314 Horatiu Vultur     2021-11-29  1188  	/* init switch */
db8bcaad539314 Horatiu Vultur     2021-11-29  1189  	lan966x_init(lan966x);
12c2d0a5b8e2a1 Horatiu Vultur     2021-11-29  1190  	lan966x_stats_init(lan966x);
db8bcaad539314 Horatiu Vultur     2021-11-29  1191  
db8bcaad539314 Horatiu Vultur     2021-11-29  1192  	/* go over the child nodes */
db8bcaad539314 Horatiu Vultur     2021-11-29  1193  	fwnode_for_each_available_child_node(ports, portnp) {
db8bcaad539314 Horatiu Vultur     2021-11-29  1194  		phy_interface_t phy_mode;
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1195  		struct phy *serdes;
db8bcaad539314 Horatiu Vultur     2021-11-29  1196  		u32 p;
db8bcaad539314 Horatiu Vultur     2021-11-29  1197  
db8bcaad539314 Horatiu Vultur     2021-11-29  1198  		if (fwnode_property_read_u32(portnp, "reg", &p))
db8bcaad539314 Horatiu Vultur     2021-11-29  1199  			continue;
db8bcaad539314 Horatiu Vultur     2021-11-29  1200  
db8bcaad539314 Horatiu Vultur     2021-11-29  1201  		phy_mode = fwnode_get_phy_mode(portnp);
18079c5e17e752 Rosen Penev        2025-09-04  1202  		if (phy_mode)
                                                                    ^^^^^^^^
This needs to be if (phy_mode < 0) { except phy_mode_t is unsigned
so it would be:

	err = fwnode_get_phy_mode(portnp);
	if (err < 0)
		goto cleanup_ports;
	phy_mode = err;

18079c5e17e752 Rosen Penev        2025-09-04 @1203  			goto cleanup_ports;
18079c5e17e752 Rosen Penev        2025-09-04  1204  
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1205  		err = lan966x_probe_port(lan966x, p, phy_mode, portnp);
                                                                                                     ^^^^^^^^

db8bcaad539314 Horatiu Vultur     2021-11-29  1206  		if (err)
db8bcaad539314 Horatiu Vultur     2021-11-29  1207  			goto cleanup_ports;
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1208  
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1209  		/* Read needed configuration */
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1210  		lan966x->ports[p]->config.portmode = phy_mode;
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1211  		lan966x->ports[p]->fwnode = fwnode_handle_get(portnp);
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1212  
9da87c6ef770f5 Geert Uytterhoeven 2023-01-24  1213  		serdes = devm_of_phy_optional_get(lan966x->dev,
9da87c6ef770f5 Geert Uytterhoeven 2023-01-24  1214  						  to_of_node(portnp), NULL);
b58cdd4388b1d8 Michael Walle      2022-05-26  1215  		if (IS_ERR(serdes)) {
b58cdd4388b1d8 Michael Walle      2022-05-26  1216  			err = PTR_ERR(serdes);
b58cdd4388b1d8 Michael Walle      2022-05-26  1217  			goto cleanup_ports;
b58cdd4388b1d8 Michael Walle      2022-05-26  1218  		}
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1219  		lan966x->ports[p]->serdes = serdes;
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1220  
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1221  		lan966x_port_init(lan966x->ports[p]);
6a2159be7604f5 Horatiu Vultur     2022-11-09  1222  		err = lan966x_xdp_port_init(lan966x->ports[p]);
6a2159be7604f5 Horatiu Vultur     2022-11-09  1223  		if (err)
6a2159be7604f5 Horatiu Vultur     2022-11-09  1224  			goto cleanup_ports;
db8bcaad539314 Horatiu Vultur     2021-11-29  1225  	}
db8bcaad539314 Horatiu Vultur     2021-11-29  1226  
925f3deb45df73 Clément Léger      2023-01-12  1227  	fwnode_handle_put(ports);
925f3deb45df73 Clément Léger      2023-01-12  1228  
7aacb894b1adf8 Horatiu Vultur     2022-01-04  1229  	lan966x_mdb_init(lan966x);
811ba277118290 Horatiu Vultur     2021-12-18  1230  	err = lan966x_fdb_init(lan966x);
811ba277118290 Horatiu Vultur     2021-12-18  1231  	if (err)
811ba277118290 Horatiu Vultur     2021-12-18  1232  		goto cleanup_ports;
811ba277118290 Horatiu Vultur     2021-12-18  1233  
d096459494a887 Horatiu Vultur     2022-01-31  1234  	err = lan966x_ptp_init(lan966x);
d096459494a887 Horatiu Vultur     2022-01-31  1235  	if (err)
d096459494a887 Horatiu Vultur     2022-01-31  1236  		goto cleanup_fdb;
d096459494a887 Horatiu Vultur     2022-01-31  1237  
c8349639324a79 Horatiu Vultur     2022-04-08  1238  	err = lan966x_fdma_init(lan966x);
c8349639324a79 Horatiu Vultur     2022-04-08  1239  	if (err)
c8349639324a79 Horatiu Vultur     2022-04-08  1240  		goto cleanup_ptp;
c8349639324a79 Horatiu Vultur     2022-04-08  1241  
b053122532d7aa Horatiu Vultur     2022-11-25  1242  	err = lan966x_vcap_init(lan966x);
b053122532d7aa Horatiu Vultur     2022-11-25  1243  	if (err)
b053122532d7aa Horatiu Vultur     2022-11-25  1244  		goto cleanup_fdma;
b053122532d7aa Horatiu Vultur     2022-11-25  1245  
a83e463036ef49 Horatiu Vultur     2023-05-16  1246  	lan966x_dcb_init(lan966x);
a83e463036ef49 Horatiu Vultur     2023-05-16  1247  
db8bcaad539314 Horatiu Vultur     2021-11-29  1248  	return 0;
db8bcaad539314 Horatiu Vultur     2021-11-29  1249  
b053122532d7aa Horatiu Vultur     2022-11-25  1250  cleanup_fdma:
b053122532d7aa Horatiu Vultur     2022-11-25  1251  	lan966x_fdma_deinit(lan966x);
b053122532d7aa Horatiu Vultur     2022-11-25  1252  
c8349639324a79 Horatiu Vultur     2022-04-08  1253  cleanup_ptp:
c8349639324a79 Horatiu Vultur     2022-04-08  1254  	lan966x_ptp_deinit(lan966x);
c8349639324a79 Horatiu Vultur     2022-04-08  1255  
d096459494a887 Horatiu Vultur     2022-01-31  1256  cleanup_fdb:
d096459494a887 Horatiu Vultur     2022-01-31  1257  	lan966x_fdb_deinit(lan966x);
d096459494a887 Horatiu Vultur     2022-01-31  1258  
db8bcaad539314 Horatiu Vultur     2021-11-29  1259  cleanup_ports:
925f3deb45df73 Clément Léger      2023-01-12  1260  	fwnode_handle_put(ports);
db8bcaad539314 Horatiu Vultur     2021-11-29  1261  	fwnode_handle_put(portnp);
db8bcaad539314 Horatiu Vultur     2021-11-29  1262  
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1263  	lan966x_cleanup_ports(lan966x);
d28d6d2e37d10d Horatiu Vultur     2021-11-29  1264  
12c2d0a5b8e2a1 Horatiu Vultur     2021-11-29  1265  	cancel_delayed_work_sync(&lan966x->stats_work);
12c2d0a5b8e2a1 Horatiu Vultur     2021-11-29  1266  	destroy_workqueue(lan966x->stats_queue);
12c2d0a5b8e2a1 Horatiu Vultur     2021-11-29  1267  	mutex_destroy(&lan966x->stats_lock);
12c2d0a5b8e2a1 Horatiu Vultur     2021-11-29  1268  
99975ad644c783 Herve Codina       2024-05-13  1269  	debugfs_remove_recursive(lan966x->debugfs_root);
99975ad644c783 Herve Codina       2024-05-13  1270  
db8bcaad539314 Horatiu Vultur     2021-11-29  1271  	return err;
db8bcaad539314 Horatiu Vultur     2021-11-29  1272  }

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


      parent reply	other threads:[~2025-09-09  7:46 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-04 20:38 [PATCH net] net: lan966x: enforce phy-mode presence Rosen Penev
2025-09-04 21:02 ` Andrew Lunn
2025-09-04 21:27   ` Rosen Penev
2025-09-08 12:16     ` Andrew Lunn
2025-09-05 11:59 ` Simon Horman
2025-09-05 12:52 ` Vladimir Oltean
2025-09-05 20:05   ` Rosen Penev
2025-09-09  7:46 ` Dan Carpenter [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202509090831.ygWp8XHz-lkp@intel.com \
    --to=dan.carpenter@linaro.org \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=edumazet@google.com \
    --cc=horatiu.vultur@microchip.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=oe-kbuild@lists.linux.dev \
    --cc=pabeni@redhat.com \
    --cc=rosenp@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox