Message ID | 20180724084510.6104-4-yehs2007@zoho.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Do not request a pointer kaddr when not required | expand |
On 07/24/2018 10:45 AM, Huaisheng Ye wrote: > From: Huaisheng Ye <yehs1@lenovo.com> > > dcssblk_direct_access() needs to check the validity of second rank > pointer kaddr for NULL assignment. If kaddr equals to NULL, it > doesn't need to calculate the value. > > Signed-off-by: Huaisheng Ye <yehs1@lenovo.com> > --- > drivers/s390/block/dcssblk.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c > index 0a312e4..9c13dc5 100644 > --- a/drivers/s390/block/dcssblk.c > +++ b/drivers/s390/block/dcssblk.c > @@ -915,7 +915,8 @@ static DEVICE_ATTR(save, S_IWUSR | S_IRUSR, dcssblk_save_show, > unsigned long dev_sz; > > dev_sz = dev_info->end - dev_info->start + 1; > - *kaddr = (void *) dev_info->start + offset; > + if (kaddr) > + *kaddr = (void *) dev_info->start + offset; So you are trading of a load + add (dev_info->start should be cache hot) against a compare+branch . Not sure that this is always a win. > *pfn = __pfn_to_pfn_t(PFN_DOWN(dev_info->start + offset), > PFN_DEV|PFN_SPECIAL); > >
From: Christian Borntraeger <borntraeger@de.ibm.com> Sent: Tuesday, July 24, 2018 4:54 PM > On 07/24/2018 10:45 AM, Huaisheng Ye wrote: > > From: Huaisheng Ye <yehs1@lenovo.com> > > > > dcssblk_direct_access() needs to check the validity of second rank > > pointer kaddr for NULL assignment. If kaddr equals to NULL, it > > doesn't need to calculate the value. > > > > Signed-off-by: Huaisheng Ye <yehs1@lenovo.com> > > --- > > drivers/s390/block/dcssblk.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c > > index 0a312e4..9c13dc5 100644 > > --- a/drivers/s390/block/dcssblk.c > > +++ b/drivers/s390/block/dcssblk.c > > @@ -915,7 +915,8 @@ static DEVICE_ATTR(save, S_IWUSR | S_IRUSR, dcssblk_save_show, > > unsigned long dev_sz; > > > > dev_sz = dev_info->end - dev_info->start + 1; > > - *kaddr = (void *) dev_info->start + offset; > > + if (kaddr) > > + *kaddr = (void *) dev_info->start + offset; > > So you are trading of a load + add (dev_info->start should be cache hot) against a > compare+branch . Not sure that this is always a win. Hmm...the calculation process of pfn is more complicated than kaddr. I think you agree to check pfn but not sure kaddr, right? From the logical consistency of code, I think it shall be better to give pfn and kaddr similar treatment. Cheers, Huaisheng Ye
On 07/24/2018 11:46 AM, Huaisheng HS1 Ye wrote: > From: Christian Borntraeger <borntraeger@de.ibm.com> > Sent: Tuesday, July 24, 2018 4:54 PM >> On 07/24/2018 10:45 AM, Huaisheng Ye wrote: >>> From: Huaisheng Ye <yehs1@lenovo.com> >>> >>> dcssblk_direct_access() needs to check the validity of second rank >>> pointer kaddr for NULL assignment. If kaddr equals to NULL, it >>> doesn't need to calculate the value. >>> >>> Signed-off-by: Huaisheng Ye <yehs1@lenovo.com> >>> --- >>> drivers/s390/block/dcssblk.c | 3 ++- >>> 1 file changed, 2 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c >>> index 0a312e4..9c13dc5 100644 >>> --- a/drivers/s390/block/dcssblk.c >>> +++ b/drivers/s390/block/dcssblk.c >>> @@ -915,7 +915,8 @@ static DEVICE_ATTR(save, S_IWUSR | S_IRUSR, dcssblk_save_show, >>> unsigned long dev_sz; >>> >>> dev_sz = dev_info->end - dev_info->start + 1; >>> - *kaddr = (void *) dev_info->start + offset; >>> + if (kaddr) >>> + *kaddr = (void *) dev_info->start + offset; >> >> So you are trading of a load + add (dev_info->start should be cache hot) against a >> compare+branch . Not sure that this is always a win. > > Hmm...the calculation process of pfn is more complicated than kaddr. I think you agree to check pfn but not sure kaddr, right? > From the logical consistency of code, I think it shall be better to give pfn and kaddr similar treatment. Reading it again, its more that I do not like the patch description. It reads like an optimization, (and I think it is not) but it should rather read more like "with an upcoming change kaddr can be NULL" or so.
From: Christian Borntraeger <borntraeger@de.ibm.com> Sent: Tuesday, July 24, 2018 7:16 PM > >> So you are trading of a load + add (dev_info->start should be cache hot) against a > >> compare+branch . Not sure that this is always a win. > > > > Hmm...the calculation process of pfn is more complicated than kaddr. I think you agree to > check pfn but not sure kaddr, right? > > From the logical consistency of code, I think it shall be better to give pfn and kaddr similar > treatment. > > Reading it again, its more that I do not like the patch description. It reads > like an optimization, (and I think it is not) but it should rather read more > like "with an upcoming change kaddr can be NULL" or so. Thanks for suggestion, I will reword the patch description during next submission. Does the patch itself need to be modified? If has, any suggestion is welcome. Cheers, Huaisheng Ye
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c index 0a312e4..9c13dc5 100644 --- a/drivers/s390/block/dcssblk.c +++ b/drivers/s390/block/dcssblk.c @@ -915,7 +915,8 @@ static DEVICE_ATTR(save, S_IWUSR | S_IRUSR, dcssblk_save_show, unsigned long dev_sz; dev_sz = dev_info->end - dev_info->start + 1; - *kaddr = (void *) dev_info->start + offset; + if (kaddr) + *kaddr = (void *) dev_info->start + offset; *pfn = __pfn_to_pfn_t(PFN_DOWN(dev_info->start + offset), PFN_DEV|PFN_SPECIAL);