> -----Original Message----- > From: Borislav Petkov [mailto:b...@alien8.de] > Sent: Sunday, May 28, 2017 1:22 PM > To: Ghannam, Yazen <yazen.ghan...@amd.com> > Cc: linux-e...@vger.kernel.org; Borislav Petkov <b...@suse.de>; Tony Luck > <tony.l...@intel.com>; x...@kernel.org; linux-kernel@vger.kernel.org > Subject: Re: [PATCH 2/3] x86/mce/AMD: Define a list_head for threshold > blocks outside the list > > On Wed, May 24, 2017 at 03:41:46PM -0500, Yazen Ghannam wrote: > > From: Yazen Ghannam <yazen.ghan...@amd.com> > > > > There needs to be a list_head outside of a linked list in order to > > iterate over it and have access to all its elements. This is because > > the > > list_for_each* macros iterate starting from head->next rather than head. > > > > Define a list_head for the threshold blocks list in struct > > threshold_bank > > struct threshold_block { > > ... > > struct list_head miscj; /* > * List of threshold blocks > * within a bank. > */ > > There's your list_head right there. >
Like I said in the commit message, the list_head needs to be outside the list to access all the elements using list_for_each*. Otherwise, we won't get a reference to the "head" element since we iterate starting from head->next and break when !head. For example here, we use block 0 as the head and I find that I don't get a reference to it when using list_for_each* as the code is currently. Am I doing something wrong? Thanks, Yazen