On Tue, Apr 12, 2011 at 12:45:33AM +0200, RafaÅ MiÅecki wrote: > 2011/4/12 Greg KH <greg@xxxxxxxxx>: > > On Tue, Apr 12, 2011 at 12:12:47AM +0200, RafaÅ MiÅecki wrote: > >> 2011/4/11 Greg KH <greg@xxxxxxxxx>: > >> > On Mon, Apr 11, 2011 at 11:36:39PM +0200, RafaÅ MiÅecki wrote: > >> >> 2011/4/11 Greg KH <greg@xxxxxxxxx>: > >> >> > Please read the documentation for how to do this properly. ÂI find it > >> >> > really hard to believe that you wrote that comment instead of putting in > >> >> > the 2 lines of code required for this function. > >> >> > > >> >> > Especially as-it-is, your code does not work properly and leaks memory > >> >> > badly. ÂWhy would you do that on purpose? > >> >> > >> >> I tried to read some documentation about this. > >> >> > >> >> 1) driver-mode/device.txt says only that: > >> >> > Callback to free the device after all references have > >> >> > gone away. This should be set by the allocator of the > >> >> > device (i.e. the bus driver that discovered the device). > >> >> I *really* do not know how my driver should "free" core on AXI bus. > >> > > >> > The structure that you have created, added to the bus, is now ready to > >> > have its memory freed. ÂSo free it. > >> > > >> > This usually means something like: > >> > Â Â Â Âstruct my_obj = to_my_obj(dev); > >> > Â Â Â Âkfree(my_obj); > >> > in the release function. > >> > >> I register core->dev to the bus (I set core->dev.bus and > >> core->dev.parent, is that what you mean?). This core->dev is "struct > >> dev" embedded in "struct axi_device". By embedded I mean it is *not* a > >> pointer, I do not alloc it, it's part of the "struct axi_device". > > > > That is exactly as it should be. > > > > Then in your release function, free the struct axi_device. ÂIt's that > > simple. ÂTo try to free it before then would be wrong and cause > > problems. > > This is because it is defined as: > struct axi_device cores[AXI_MAX_NR_CORES]; No way, seriously? You can't do that, no static struct devices please. Make these dynamic and everything will be fine. The -mm tree used to have a huge warning if you ever tried to register a statically allocated struct, but that didn't really work out, but would have saved you a lot of time here, sorry. So dynamically allocate the structures and you will be fine. thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html