On Mon, 11 Apr 2022, kernel test robot <l...@intel.com> 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-...@intel.com/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 <l...@intel.com>
>
> 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

Reply via email to