On Mon, 11 Apr 2022, kernel test robot <lkp@xxxxxxxxx> wrote: > Hi Jani, > > I love your patch! Perhaps something to improve: > > [auto build test WARNING on drm-tip/drm-tip] > [also build test WARNING on next-20220411] > [cannot apply to drm/drm-next drm-intel/for-linux-next v5.18-rc2] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use '--base' as documented in > https://git-scm.com/docs/git-format-patch] > > url: https://github.com/intel-lab-lkp/linux/commits/Jani-Nikula/drm-edid-low-level-EDID-block-read-refactoring-etc/20220411-175027 > base: git://anongit.freedesktop.org/drm/drm-tip drm-tip > config: i386-randconfig-a001-20220411 (https://download.01.org/0day-ci/archive/20220411/202204112019.U9iIZWqP-lkp@xxxxxxxxx/config) > compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project c6e83f560f06cdfe8aa47b248d8bdc58f947274b) > reproduce (this is a W=1 build): > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # https://github.com/intel-lab-lkp/linux/commit/ba74d3cc8cc1b6ba4c34a039e797994ddbc77567 > git remote add linux-review https://github.com/intel-lab-lkp/linux > git fetch --no-tags linux-review Jani-Nikula/drm-edid-low-level-EDID-block-read-refactoring-etc/20220411-175027 > git checkout ba74d3cc8cc1b6ba4c34a039e797994ddbc77567 > # save the config file to linux build tree > mkdir build_dir > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/ > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <lkp@xxxxxxxxx> > > All warnings (new ones prefixed by >>): > >>> drivers/gpu/drm/drm_edid.c:2170:6: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses] > if (!edid_extension_block_count(edid) == 0) > ^ ~~ > drivers/gpu/drm/drm_edid.c:2170:6: note: add parentheses after the '!' to evaluate the comparison first > if (!edid_extension_block_count(edid) == 0) > ^ > ( ) > drivers/gpu/drm/drm_edid.c:2170:6: note: add parentheses around left hand side expression to silence this warning > if (!edid_extension_block_count(edid) == 0) > ^ > ( ) > 1 warning generated. Whoops, thanks for the report! BR, Jani. > > > vim +2170 drivers/gpu/drm/drm_edid.c > > 2112 > 2113 /** > 2114 * drm_do_get_edid - get EDID data using a custom EDID block read function > 2115 * @connector: connector we're probing > 2116 * @get_edid_block: EDID block read function > 2117 * @data: private data passed to the block read function > 2118 * > 2119 * When the I2C adapter connected to the DDC bus is hidden behind a device that > 2120 * exposes a different interface to read EDID blocks this function can be used > 2121 * to get EDID data using a custom block read function. > 2122 * > 2123 * As in the general case the DDC bus is accessible by the kernel at the I2C > 2124 * level, drivers must make all reasonable efforts to expose it as an I2C > 2125 * adapter and use drm_get_edid() instead of abusing this function. > 2126 * > 2127 * The EDID may be overridden using debugfs override_edid or firmware EDID > 2128 * (drm_load_edid_firmware() and drm.edid_firmware parameter), in this priority > 2129 * order. Having either of them bypasses actual EDID reads. > 2130 * > 2131 * Return: Pointer to valid EDID or NULL if we couldn't find any. > 2132 */ > 2133 struct edid *drm_do_get_edid(struct drm_connector *connector, > 2134 read_block_fn read_block, > 2135 void *context) > 2136 { > 2137 enum edid_block_status status; > 2138 int i, invalid_blocks = 0; > 2139 struct edid *edid, *new; > 2140 > 2141 edid = drm_get_override_edid(connector); > 2142 if (edid) > 2143 goto ok; > 2144 > 2145 edid = kmalloc(EDID_LENGTH, GFP_KERNEL); > 2146 if (!edid) > 2147 return NULL; > 2148 > 2149 status = edid_block_read(edid, 0, read_block, context); > 2150 > 2151 edid_block_status_print(status, edid, 0); > 2152 > 2153 if (status == EDID_BLOCK_READ_FAIL) > 2154 goto fail; > 2155 > 2156 /* FIXME: Clarify what a corrupt EDID actually means. */ > 2157 if (status == EDID_BLOCK_OK || status == EDID_BLOCK_VERSION) > 2158 connector->edid_corrupt = false; > 2159 else > 2160 connector->edid_corrupt = true; > 2161 > 2162 if (!edid_block_status_valid(status, edid_block_tag(edid))) { > 2163 if (status == EDID_BLOCK_ZERO) > 2164 connector->null_edid_counter++; > 2165 > 2166 connector_bad_edid(connector, edid, 1); > 2167 goto fail; > 2168 } > 2169 >> 2170 if (!edid_extension_block_count(edid) == 0) > 2171 goto ok; > 2172 > 2173 new = krealloc(edid, edid_size(edid), GFP_KERNEL); > 2174 if (!new) > 2175 goto fail; > 2176 edid = new; > 2177 > 2178 for (i = 1; i < edid_block_count(edid); i++) { > 2179 void *block = (void *)edid_block_data(edid, i); > 2180 > 2181 status = edid_block_read(block, i, read_block, context); > 2182 > 2183 edid_block_status_print(status, block, i); > 2184 > 2185 if (!edid_block_status_valid(status, edid_block_tag(block))) { > 2186 if (status == EDID_BLOCK_READ_FAIL) > 2187 goto fail; > 2188 invalid_blocks++; > 2189 } > 2190 } > 2191 > 2192 if (invalid_blocks) { > 2193 connector_bad_edid(connector, edid, edid_block_count(edid)); > 2194 > 2195 edid = edid_filter_invalid_blocks(edid, invalid_blocks); > 2196 } > 2197 > 2198 ok: > 2199 return edid; > 2200 > 2201 fail: > 2202 kfree(edid); > 2203 return NULL; > 2204 } > 2205 EXPORT_SYMBOL_GPL(drm_do_get_edid); > 2206 -- Jani Nikula, Intel Open Source Graphics Center