>>> On 5/21/2010 at 4:55 PM, in message <20100521205527.GB9594@xxxxxxx>, Greg KH <gregkh@xxxxxxx> wrote: > On Fri, May 21, 2010 at 02:21:46PM -0600, Ky Srinivasan wrote: >> >> >> >>> On 5/21/2010 at 4:12 PM, in message <20100521201228.GA6712@xxxxxxx>, Greg KH >> <gregkh@xxxxxxx> wrote: >> > On Fri, May 21, 2010 at 07:58:26PM +0000, Haiyang Zhang wrote: >> >> From: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx> >> >> >> >> Subject: staging: hv: Fix race condition on IC channel initialization >> >> There is a possible race condition when hv_utils starts to load immediately >> >> after hv_vmbus is loading - null pointer error could happen. >> >> This patch added an atomic counter to ensure all channels are ready before >> >> vmbus_init() returns. So another module won't have any uninitialized >> > channel. >> > >> > Better, but not quite ready... >> > >> >> +/* Counter of IC channels initialized */ >> >> +atomic_t hv_utils_initcnt = ATOMIC_INIT(0); >> > >> > This doesn't need to be an atomic variable, does it really? >> > >> > Why not have a simple bool variable "vmbus_initialized" or something. >> > It starts out as false, and then turns true when you are up and ready. >> > Then provide a function that tests it: >> > bool hv_vmbus_ready(void) >> > { >> > return vmbus_initialized >> > } >> > EXPORT_SYMBOL_GPL(hv_vmbus_ready); >> I agree with Greg; I would go a step further and deal with this issue >> as part of loading the bus driver. After all, we already have >> dependencies established for various LIC drivers on the bus driver. >> The fact that even after the bus driver is loaded we cannot reliably >> load other drivers implies that there is an additional dependency that >> is not currently being handled. Why can't we ensure that the bus >> driver is fully initialized before we are done with loading the bus >> driver. > > Um, I think that is what this patch fixes :) > > It just doesn't do it in a way that I think is very good... Ok, my mistake. When I saw hv_vmbus_ready function being exported, I was under the impression each of the drivers that depend on the bus driver to check if the bus driver was properly initialized. Regards, K. Y > > thanks, > > greg k-h _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel