From mboxrd@z Thu Jan 1 00:00:00 1970 From: buyitian@gmail.com (buyitian) Date: Fri, 30 Jan 2015 21:52:07 +0800 Subject: spinlock variable protection In-Reply-To: References: Message-ID: To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org > ? 2015?1?30??20:43?"Matwey V. Kornilov" ??? > > Hi, > > I have the following code > > int ret = 0; > unsigned long irqflags; > > spin_lock_irqsave(&lock, irqflags); > > //... > ret = hdl->count; > //... > > spin_unlock_irqrestore(&lock, irqflags); > return ret; > > I would like to be sure, that ret will not be optimized out. I think > compiler can convert the code to equivalent: > > unsigned long irqflags; > > spin_lock_irqsave(&lock, irqflags); > > //... > //... > > spin_unlock_irqrestore(&lock, irqflags); > return hdl->count; > > But this is not what I want, because I use lock to protect hdl and want > to return hdl->count value as it was in protected section. > > Please check the assembly code to double confirm the GCC behavior. Why will GCC change the order as what you mentioned? Only assembly code can tell you. > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies at kernelnewbies.org > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies