On Wed, Jul 30, 2008 at 4:57 AM, Alexander Beregalov
<[EMAIL PROTECTED]> wrote:
> 2008/7/30 Jacob <[EMAIL PROTECTED]>:
>> If we haven't beat this to death yet, the right way to fix these warnings
>> is to return a "smth" data type... which most people have commented on
>>
>> // original version
>> smth function()
>> {
>> switch (var) {
>> case one:
>> return 1;
>> default:
>> BUG();
>> }
>> }
>>
>> // modified version
>> smth function()
>> {
>> smth ret = 0;
>> switch (var) { // unless this is a global var is undefined
>> case one:
>> ret = 1; // 1 was not a 'smth' type so we should use
>> the function's return type or face compiler errors/warnings
>> break; // unless you want hard to find bugs always
>> include a break;
>> default:
>> BUG(); // if this is a macro does it return a value?
>> ret = 0;
>> break;
>> }
>> return ret; // since we are returning a 'smth' type we do not
>> let control reach the end of this non-void funtion
>> }
>
> Looks good, but how can I know which value should it return in that case?
>>
Well, If we look at the standard way and we wish to be philosophically
right, if the return type is non void, we must return a value. Now,
its the choice of the developer to handle it, how !
>>
>> Where does this function get used, and what is it used for?
> Ok, some examples
>
> kernel/cpuset.c:
>
> static u64 cpuset_read_u64(struct cgroup *cont, struct cftype *cft)
> {
> struct cpuset *cs = cgroup_cs(cont);
> cpuset_filetype_t type = cft->private;
> switch (type) {
> case FILE_CPU_EXCLUSIVE:
> return is_cpu_exclusive(cs);
> case FILE_MEM_EXCLUSIVE:
> return is_mem_exclusive(cs);
> case FILE_MEM_HARDWALL:
> return is_mem_hardwall(cs);
> case FILE_SCHED_LOAD_BALANCE:
> return is_sched_load_balance(cs);
> case FILE_MEMORY_MIGRATE:
> return is_memory_migrate(cs);
> case FILE_MEMORY_PRESSURE_ENABLED:
> return cpuset_memory_pressure_enabled;
> case FILE_MEMORY_PRESSURE:
> return fmeter_getrate(&cs->fmeter);
> case FILE_SPREAD_PAGE:
> return is_spread_page(cs);
> case FILE_SPREAD_SLAB:
> return is_spread_slab(cs);
> default:
> BUG();
> }
> }
>
> static s64 cpuset_read_s64(struct cgroup *cont, struct cftype *cft)
> {
> struct cpuset *cs = cgroup_cs(cont);
> cpuset_filetype_t type = cft->private;
> switch (type) {
> case FILE_SCHED_RELAX_DOMAIN_LEVEL:
> return cs->relax_domain_level;
> default:
> BUG();
> }
> }
>
>
> mm/mempolicy.c:
>
> /*
> * Depending on the memory policy provide a node from which to allocate the
> * next slab entry.
> * @policy must be protected by freeing by the caller. If @policy is
> * the current task's mempolicy, this protection is implicit, as only the
> * task can change it's policy. The system default policy requires no
> * such protection.
> */
> unsigned slab_node(struct mempolicy *policy)
> {
> if (!policy || policy->flags & MPOL_F_LOCAL)
> return numa_node_id();
>
> switch (policy->mode) {
> case MPOL_PREFERRED:
> /*
> * handled MPOL_F_LOCAL above
> */
> return policy->v.preferred_node;
>
> case MPOL_INTERLEAVE:
> return interleave_nodes(policy);
>
> case MPOL_BIND: {
> /*
> * Follow bind policy behavior and start allocation at the
> * first node.
> */
> struct zonelist *zonelist;
> struct zone *zone;
> enum zone_type highest_zoneidx = gfp_zone(GFP_KERNEL);
> zonelist = &NODE_DATA(numa_node_id())->node_zonelists[0];
> (void)first_zones_zonelist(zonelist, highest_zoneidx,
> &policy->v.nodes,
> &zone);
> return zone->node;
> }
>
> default:
> BUG();
> }
> }
>
>
> drivers/net/sky2.c:
>
> /* Chip internal frequency for clock calculations */
> static u32 sky2_mhz(const struct sky2_hw *hw)
> {
> switch (hw->chip_id) {
> case CHIP_ID_YUKON_EC:
> case CHIP_ID_YUKON_EC_U:
> case CHIP_ID_YUKON_EX:
> case CHIP_ID_YUKON_SUPR:
> case CHIP_ID_YUKON_UL_2:
> return 125;
>
> case CHIP_ID_YUKON_FE:
> return 100;
>
> case CHIP_ID_YUKON_FE_P:
> return 50;
>
> case CHIP_ID_YUKON_XL:
> return 156;
>
> default:
> BUG();
> }
> }
>
> --
> To unsubscribe from this list: send an email with
> "unsubscribe kernelnewbies" to [EMAIL PROTECTED]
> Please read the FAQ at http://kernelnewbies.org/FAQ
>
>
--
Regards,
Sandeep.
"To learn is to change. Education is a process that changes the learner."
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ