Thread (43 messages) 43 messages, 10 authors, 2024-06-20

Re: [PATCH 1/3] mctp pcc: Implement MCTP over PCC Transport

From: Andrew Lunn <andrew@lunn.ch>
Date: 2024-05-13 20:08:28
Also in: lkml

+struct mctp_pcc_hdr {
+	u32 signature;
+	u32  flags;
There looks to be an extra space here, or a tab vs space issue.
+	u32 length;
+	char mctp_signature[4];
+};
+
+struct mctp_pcc_packet {
+	struct mctp_pcc_hdr pcc_header;
+	union {
+		struct mctp_hdr     mctp_header;
and more here. I would expect checkpatch to point these out.
+struct mctp_pcc_hw_addr {
+	int inbox_index;
+	int outbox_index;
+};
+	physical_link_addr.inbox_index =
+		htonl(mctp_pcc_dev->hw_addr.inbox_index);

These are {in|out}box_index are u32s right? Otherwise you would not be
using htonl() on them. Maybe specify the type correctly.
+	physical_link_addr.outbox_index =
+		htonl(mctp_pcc_dev->hw_addr.outbox_index);
You should also mark the physical_link_addr members as being big
endian so sparse can check you are not missing any byte swaps.
+	dev_addr_set(ndev, (const u8 *)&physical_link_addr);
+	rc = register_netdev(ndev);
+	if (rc)
+		goto cleanup_in_channel;
+	list_add_tail(&mctp_pcc_dev->head, &mctp_pcc_ndevs);
+	return 0;
+cleanup_in_channel:
It would be normal to add a blink line after the return, just to make
it easier to see where the error cleanup code starts.

+	mctp_pcc_dev->cleanup_channel(mctp_pcc_dev->in_chan);
+cleanup_out_channel:
+	mctp_pcc_dev->cleanup_channel(mctp_pcc_dev->out_chan);
+free_netdev:
+	unregister_netdev(ndev);
Can you get here with the ndev actually registered?
+static acpi_status lookup_pcct_indices(struct acpi_resource *ares, void *context)
+{
+	struct acpi_resource_address32 *addr;
+	struct lookup_context *luc = context;
+
+	switch (ares->type) {
+	case 0x0c:
+	case 0x0a:
Please replace these magic numbers of #defines.
+static int mctp_pcc_driver_add(struct acpi_device *adev)
+{
+	int inbox_index;
+	int outbox_index;
+	acpi_handle dev_handle;
+	acpi_status status;
+	struct lookup_context context = {0, 0, 0};
+
+	dev_info(&adev->dev, "Adding mctp_pcc device for HID  %s\n", acpi_device_hid(adev));
It would be better to not spam the logs when a driver probes, unless
there is an actual error.
+	dev_handle = acpi_device_handle(adev);
+	status = acpi_walk_resources(dev_handle, "_CRS", lookup_pcct_indices, &context);
+	if (ACPI_SUCCESS(status)) {
+		inbox_index = context.inbox_index;
+		outbox_index = context.outbox_index;
+		return create_mctp_pcc_netdev(adev, &adev->dev, inbox_index, outbox_index);
+	}
+	dev_err(&adev->dev, "FAILURE to lookup PCC indexes from CRS");
+	return -EINVAL;
+};
+
+/* pass in adev=NULL to remove all devices
+ */
+static void mctp_pcc_driver_remove(struct acpi_device *adev)
+{
+	struct mctp_pcc_ndev *mctp_pcc_dev = NULL;
+	struct list_head *ptr;
+	struct list_head *tmp;
+
+	list_for_each_safe(ptr, tmp, &mctp_pcc_ndevs) {
+		mctp_pcc_dev = list_entry(ptr, struct mctp_pcc_ndev, head);
+		if (!adev || mctp_pcc_dev->acpi_device == adev) {
+			struct net_device *ndev;
+
+			mctp_pcc_dev->cleanup_channel(mctp_pcc_dev->out_chan);
+			mctp_pcc_dev->cleanup_channel(mctp_pcc_dev->in_chan);
+			ndev = mctp_pcc_dev->mdev.dev;
+			if (ndev)
+				mctp_unregister_netdev(ndev);
+			list_del(ptr);
+			if (adev)
+				break;
+		}
+	}
+};
+
+static const struct acpi_device_id mctp_pcc_device_ids[] = {
+	{ "DMT0001", 0},
+	{ "", 0},
+};
+
+static struct acpi_driver mctp_pcc_driver = {
+	.name = "mctp_pcc",
+	.class = "Unknown",
+	.ids = mctp_pcc_device_ids,
+	.ops = {
+		.add = mctp_pcc_driver_add,
+		.remove = mctp_pcc_driver_remove,
+		.notify = NULL,
+	},
+	.owner = THIS_MODULE,
+
+};
+
+static int __init mctp_pcc_mod_init(void)
+{
+	int rc;
+
+	pr_info("initializing MCTP over PCC\n");
More useless log spamming... pr_dbg(), or remove altogether.

	Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help