On Wed, May 13, 2015 at 03:34:05PM +0300, Jani Nikula wrote: > Add one explicit discard of __iomem address space qualifier in > validate_vbt(), and respect it otherwise. This adds clarity in the code, > and reduces the sparse warnings from the module to just one. > > Quoting Daniel, "The vbt really is plain old memory. Except that it's > reserved in the e820 table as something special and hence treated as io > range by the kernel. But it is memory, hence casting away the __iomem is > imo the right approach." > > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> Merged entire series, thanks. -Daniel > --- > drivers/gpu/drm/i915/intel_bios.c | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c > index 6e018ba53035..198fc3c3291b 100644 > --- a/drivers/gpu/drm/i915/intel_bios.c > +++ b/drivers/gpu/drm/i915/intel_bios.c > @@ -1199,15 +1199,22 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = { > { } > }; > > -static const struct bdb_header *validate_vbt(const void *base, size_t size, > - const void *_vbt, > +static const struct bdb_header *validate_vbt(const void __iomem *_base, > + size_t size, > + const void __iomem *_vbt, > const char *source) > { > - const struct vbt_header *vbt = _vbt; > - size_t offset; > + /* > + * This is the one place where we explicitly discard the address space > + * (__iomem) of the BIOS/VBT. (And this will cause a sparse complaint.) > + * From now on everything is based on 'base', and treated as regular > + * memory. > + */ > + const void *base = (const void *) _base; > + size_t offset = _vbt - _base; > + const struct vbt_header *vbt = base + offset; > const struct bdb_header *bdb; > > - offset = _vbt - base; > if (offset + sizeof(struct vbt_header) > size) { > DRM_DEBUG_DRIVER("VBT header incomplete\n"); > return NULL; > @@ -1235,14 +1242,14 @@ static const struct bdb_header *validate_vbt(const void *base, size_t size, > return bdb; > } > > -static const struct bdb_header *find_vbt(void *bios, size_t size) > +static const struct bdb_header *find_vbt(void __iomem *bios, size_t size) > { > const struct bdb_header *bdb = NULL; > size_t i; > > /* Scour memory looking for the VBT signature. */ > for (i = 0; i + 4 < size; i++) { > - if (memcmp(bios + i, "$VBT", 4) == 0) { > + if (ioread32(bios + i) == *((const u32 *) "$VBT")) { > bdb = validate_vbt(bios, size, bios + i, "PCI ROM"); > break; > } > -- > 2.1.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx