lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Fri, 5 Nov 2021 17:21:27 +0300
From:   Dan Carpenter <dan.carpenter@...cle.com>
To:     Dafna Hirschfeld <dafna.hirschfeld@...labora.com>
Cc:     linux-media@...r.kernel.org,
        Robert Beckett <bob.beckett@...labora.com>,
        Mauro Carvalho Chehab <mchehab@...nel.org>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        "open list:STAGING SUBSYSTEM" <linux-staging@...ts.linux.dev>,
        open list <linux-kernel@...r.kernel.org>,
        laurent.pinchart@...asonboard.com, hverkuil@...all.nl,
        kernel@...labora.com, dafna3@...il.com,
        kiril.bicevski@...labora.com,
        Nas Chung <nas.chung@...psnmedia.com>,
        lafley.kim@...psnmedia.com, scott.woo@...psnmedia.com,
        olivier.crete@...labora.com
Subject: Re: [PATCH v2 1/6] staging: media: wave5: Add vpuapi layer

On Tue, Nov 02, 2021 at 11:47:24AM +0100, Dafna Hirschfeld wrote:
> > > +int wave5_vpu_decode(struct vpu_instance *vpu_inst, struct dec_param *option, u32 *fail_res)
> > > +{
> > > +	u32 mode_option = DEC_PIC_NORMAL, bs_option, reg_val;
> > > +	s32 force_latency = -1;
> > 
> > Ugh....  Write this as:
> > 
> > 	bool force_latency = false;
> > 
> > 
> > > +	struct dec_info *p_dec_info = &vpu_inst->codec_info->dec_info;
> > > +	struct dec_open_param *p_open_param = &p_dec_info->open_param;
> > > +	int ret;
> > > +
> > > +	if (p_dec_info->thumbnail_mode) {
> > > +		mode_option = DEC_PIC_W_THUMBNAIL;
> > > +	} else if (option->skipframe_mode) {
> > > +		switch (option->skipframe_mode) {
> > > +		case WAVE_SKIPMODE_NON_IRAP:
> > > +			mode_option = SKIP_NON_IRAP;
> > > +			force_latency = 0;
> > 
> > 	force_latency = true;
> > 
> > > +			break;
> > > +		case WAVE_SKIPMODE_NON_REF:
> > > +			mode_option = SKIP_NON_REF_PIC;
> > > +			break;
> > > +		default:
> > > +			// skip off
> > > +			break;
> > > +		}
> > > +	}
> > > +
> > > +	// set disable reorder
> > > +	if (!p_dec_info->reorder_enable)
> > > +		force_latency = 0;
> > 
> > 	force_latency = true;
> > 
> > > +
> > > +	/* set attributes of bitstream buffer controller */
> > > +	bs_option = 0;
> > > +	reg_val = 0;
> > 
> > This assign is never used.
> > 
> > > +	switch (p_open_param->bitstream_mode) {
> > > +	case BS_MODE_INTERRUPT:
> > > +		bs_option = 0;
> > 
> > Already set above.
> > 
> > > +		break;
> > > +	case BS_MODE_PIC_END:
> > > +		bs_option = BSOPTION_ENABLE_EXPLICIT_END;
> > > +		break;
> > > +	default:
> > > +		return -EINVAL;
> > > +	}
> > > +
> > > +	vpu_write_reg(vpu_inst->dev, W5_BS_RD_PTR, p_dec_info->stream_rd_ptr);
> > > +	vpu_write_reg(vpu_inst->dev, W5_BS_WR_PTR, p_dec_info->stream_wr_ptr);
> > > +	if (p_dec_info->stream_endflag == 1)
> > > +		bs_option = 3; // (stream_end_flag<<1) | EXPLICIT_END
> > > +	if (p_open_param->bitstream_mode == BS_MODE_PIC_END)
> > > +		bs_option |= (1UL << 31);
> > > +	if (vpu_inst->std == W_AV1_DEC)
> > > +		bs_option |= ((p_open_param->av1_format) << 2);
> > > +	vpu_write_reg(vpu_inst->dev, W5_BS_OPTION, bs_option);
> > > +
> > > +	/* secondary AXI */
> > > +	reg_val = (p_dec_info->sec_axi_info.wave.use_bit_enable << 0) |
> > > +		(p_dec_info->sec_axi_info.wave.use_ip_enable << 9) |
> > > +		(p_dec_info->sec_axi_info.wave.use_lf_row_enable << 15);
> > > +	vpu_write_reg(vpu_inst->dev, W5_USE_SEC_AXI, reg_val);
> > > +
> > > +	/* set attributes of user buffer */
> > > +	vpu_write_reg(vpu_inst->dev, W5_CMD_DEC_USER_MASK, p_dec_info->user_data_enable);
> > > +
> > > +	vpu_write_reg(vpu_inst->dev, W5_COMMAND_OPTION,
> > > +		      ((option->disable_film_grain << 6) | (option->cra_as_bla_flag << 5) |
> > > +		 mode_option));
> > 
> > These are badly aligned and contribute to the Wall of Text Effect that
> > this code has.  :(
> > 
> > 	vpu_write_reg(vpu_inst->dev, W5_COMMAND_OPTION,
> > 		      (option->disable_film_grain << 6) |
> > 		      (option->cra_as_bla_flag << 5) |
> > 		      mode_option);
> > 
> > 
> > 
> > > +	vpu_write_reg(vpu_inst->dev, W5_CMD_DEC_TEMPORAL_ID_PLUS1,
> > > +		      ((p_dec_info->target_spatial_id + 1) << 9) |
> > > +		 (p_dec_info->temp_id_select_mode << 8) | (p_dec_info->target_temp_id + 1));
> > 
> > 	vpu_write_reg(vpu_inst->dev, W5_CMD_DEC_TEMPORAL_ID_PLUS1,
> > 		      ((p_dec_info->target_spatial_id + 1) << 9) |
> > 		      (p_dec_info->temp_id_select_mode << 8) |
> > 		      (p_dec_info->target_temp_id + 1));
> > 
> > Why do we have to add "+ 1" to p_dec_info->target_spatial_id?
> 
> for some reason the code defines 'DECODE_ALL_SPATIAL_LAYERS' to -1 and then adding '+ 1' set it to 0
> no idea why is it implemented like that.
> 
> > 
> > 
> > > +	vpu_write_reg(vpu_inst->dev, W5_CMD_SEQ_CHANGE_ENABLE_FLAG, p_dec_info->seq_change_mask);
> > > +	vpu_write_reg(vpu_inst->dev, W5_CMD_DEC_FORCE_FB_LATENCY_PLUS1, force_latency + 1);
> > 
> > 
> > 	vpu_write_reg(vpu_inst->dev, W5_CMD_DEC_FORCE_FB_LATENCY_PLUS1, force_latency);
> 
> is it nice to write bool to a reigeter?, isn't it better to set 'force_latency' to u32?
> 

It's fine to write a bool to register or to make it a u32.  But the
point is this code is obfuscated where -1 is zero/false and 0 represents
1/true.

regards,
dan carpenter

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ