lkml.org 
[lkml]   [2015]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subject[RFC] pwm: core: unsigned or signed ints for pwm_config
Hey Thierry, list

I'm going over the pwm core and notice that in the pwm header, duty_ns
and period_ns is internally stored as an unsigned int.

struct pwm_device {
const char *label;
unsigned long flags;
unsigned int hwpwm;
unsigned int pwm;
struct pwm_chip *chip;
void *chip_data;

unsigned int period;
unsigned int duty_cycle;
enum pwm_polarity polarity;
};

However, pwm_config takes signed ints
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);

So digging a little deeper in the PWM core, I see that pwm_config
dissallows negative ints, so having them unsigned has no benefit (and
technically is illegal)
if (!pwm || duty_ns < 0|| period_ns= 0 || duty_ns > period_ns)
return -EINVAL;

and because (after the check) we cram the signed int into an unsigned one:

pwm->duty_cycle = duty_ns;
pwm->period = period_ns;

This could end up badly when using any unsigned int larger then INT_MAX
and thus ending up with a negative duty/period. I haven't checked deeper
if this is accounted for later, but would it be worth my time to convert
all ints to unsigned ints? Since negative period and duty cycles are
really not possible anyway?

Olliver


\
 
 \ /
  Last update: 2015-09-29 09:41    [W:0.051 / U:0.924 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site