Thread (11 messages) read the whole thread 11 messages, 5 authors, 2024-06-28

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

From: Adam Young <hidden>
Date: 2024-06-28 16:51:58
Also in: lkml

Yep, you are right, and as I continue to mull this over, I realize I can 
make it much simpler.

Sorry about missing the changelog entry, as I had written that prior to 
realizing that all of this cleanup was a workaround for the error you 
found in the first iteration:  flipping the null meant I was leaving 
behind devices when I should have been cleaning them up.  So, yeah, I 
think the list can go now.



On 6/28/24 04:41, Jeremy Kerr wrote:
You can save the list_entry() below by using list_for_each_entry_safe()
here.
quoted
+               struct net_device *ndev;
+               struct mctp_pcc_ndev *mctp_pcc_dev;
+
+               mctp_pcc_dev = list_entry(ptr, struct mctp_pcc_ndev, next);
+               if (mctp_pcc_dev->acpi_device != adev)
+                       continue;
Wait, you removed the case where you clean up the whole list if adev is
NULL?

Now this contradicts your section of the changelog:

- Did not change the module init unload function to use the
   ACPI equivalent as they do not remove all devices prior
   to unload, leading to dangling references and seg faults.

Does this mean you no longer need to free all instances on unload? In
which case, that sounds great! that probably also means:

  - all the list is doing is allowing you to find the mctp_pcc_dev from
    the acpi_device

  - but: you can turn an acpi_device into a mctp_pcc_dev from
    adev->driver_data (which you're already setting), so you don't need
    the list

  - then, _remove just becomes something like:

     static void mctp_pcc_driver_remove(struct acpi_device *adev)
     {
             struct mctp_pcc_dev *dev = acpi_driver_data(adev);

             pcc_mbox_free_channel(dev->out_chan);
             pcc_mbox_free_channel(dev->in_chan);
             if (dev->mdev.dev)
                     mctp_unregister_netdev(dev->mdev.dev);
     }

     (but I can't see how dev->mdev.dev can be null, so you may be able
     to remove the condition too)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help