Skip to content

Commit

Permalink
Blackfin: kgdb: fix up error return values
Browse files Browse the repository at this point in the history
The Blackfin kgdb code was all passing back positive errno values when it
really should have been using negative errno values.

Reported-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
  • Loading branch information
Mike Frysinger committed Jun 12, 2009
1 parent a43b739 commit 11aca0e
Showing 1 changed file with 30 additions and 25 deletions.
55 changes: 30 additions & 25 deletions arch/blackfin/kernel/kgdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ static int validate_memory_access_address(unsigned long addr, int size)
int cpu = raw_smp_processor_id();

if (size < 0)
return EFAULT;
return -EFAULT;
if (addr >= 0x1000 && (addr + size) <= physical_mem_end)
return 0;
if (addr >= SYSMMR_BASE)
Expand Down Expand Up @@ -498,7 +498,7 @@ static int validate_memory_access_address(unsigned long addr, int size)
if (IN_MEM(addr, size, L2_START, L2_LENGTH))
return 0;

return EFAULT;
return -EFAULT;
}

/*
Expand All @@ -508,14 +508,15 @@ static int validate_memory_access_address(unsigned long addr, int size)
int kgdb_mem2hex(char *mem, char *buf, int count)
{
char *tmp;
int err = 0;
int err;
unsigned char *pch;
unsigned short mmr16;
unsigned long mmr32;
int cpu = raw_smp_processor_id();

if (validate_memory_access_address((unsigned long)mem, count))
return EFAULT;
err = validate_memory_access_address((unsigned long)mem, count);
if (err)
return err;

/*
* We use the upper half of buf as an intermediate buffer for the
Expand All @@ -533,7 +534,7 @@ int kgdb_mem2hex(char *mem, char *buf, int count)
*tmp++ = *pch++;
tmp -= 2;
} else
err = EFAULT;
err = -EFAULT;
break;
case 4:
if ((unsigned int)mem % 4 == 0) {
Expand All @@ -545,10 +546,10 @@ int kgdb_mem2hex(char *mem, char *buf, int count)
*tmp++ = *pch++;
tmp -= 4;
} else
err = EFAULT;
err = -EFAULT;
break;
default:
err = EFAULT;
err = -EFAULT;
}
} else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH))
#ifdef CONFIG_SMP
Expand All @@ -557,7 +558,7 @@ int kgdb_mem2hex(char *mem, char *buf, int count)
) {
/* access L1 instruction SRAM*/
if (dma_memcpy(tmp, mem, count) == NULL)
err = EFAULT;
err = -EFAULT;
} else
err = probe_kernel_read(tmp, mem, count);

Expand Down Expand Up @@ -585,7 +586,7 @@ int kgdb_ebin2mem(char *buf, char *mem, int count)
char *tmp_new;
unsigned short *mmr16;
unsigned long *mmr32;
int err = 0;
int err;
int size = 0;
int cpu = raw_smp_processor_id();

Expand All @@ -601,8 +602,9 @@ int kgdb_ebin2mem(char *buf, char *mem, int count)
size++;
}

if (validate_memory_access_address((unsigned long)mem, size))
return EFAULT;
err = validate_memory_access_address((unsigned long)mem, size);
if (err)
return err;

if ((unsigned int)mem >= SYSMMR_BASE) { /*access MMR registers*/
switch (size) {
Expand All @@ -611,17 +613,17 @@ int kgdb_ebin2mem(char *buf, char *mem, int count)
mmr16 = (unsigned short *)buf;
*(unsigned short *)mem = *mmr16;
} else
return EFAULT;
err = -EFAULT;
break;
case 4:
if ((unsigned int)mem % 4 == 0) {
mmr32 = (unsigned long *)buf;
*(unsigned long *)mem = *mmr32;
} else
return EFAULT;
err = -EFAULT;
break;
default:
return EFAULT;
err = -EFAULT;
}
} else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH))
#ifdef CONFIG_SMP
Expand All @@ -630,7 +632,7 @@ int kgdb_ebin2mem(char *buf, char *mem, int count)
) {
/* access L1 instruction SRAM */
if (dma_memcpy(mem, buf, size) == NULL)
err = EFAULT;
err = -EFAULT;
} else
err = probe_kernel_write(mem, buf, size);

Expand All @@ -648,10 +650,12 @@ int kgdb_hex2mem(char *buf, char *mem, int count)
char *tmp_hex;
unsigned short *mmr16;
unsigned long *mmr32;
int err;
int cpu = raw_smp_processor_id();

if (validate_memory_access_address((unsigned long)mem, count))
return EFAULT;
err = validate_memory_access_address((unsigned long)mem, count);
if (err)
return err;

/*
* We use the upper half of buf as an intermediate buffer for the
Expand All @@ -673,17 +677,17 @@ int kgdb_hex2mem(char *buf, char *mem, int count)
mmr16 = (unsigned short *)tmp_raw;
*(unsigned short *)mem = *mmr16;
} else
return EFAULT;
err = -EFAULT;
break;
case 4:
if ((unsigned int)mem % 4 == 0) {
mmr32 = (unsigned long *)tmp_raw;
*(unsigned long *)mem = *mmr32;
} else
return EFAULT;
err = -EFAULT;
break;
default:
return EFAULT;
err = -EFAULT;
}
} else if ((cpu == 0 && IN_MEM(mem, count, L1_CODE_START, L1_CODE_LENGTH))
#ifdef CONFIG_SMP
Expand All @@ -692,10 +696,11 @@ int kgdb_hex2mem(char *buf, char *mem, int count)
) {
/* access L1 instruction SRAM */
if (dma_memcpy(mem, tmp_raw, count) == NULL)
return EFAULT;
err = -EFAULT;
} else
return probe_kernel_write(mem, tmp_raw, count);
return 0;
err = probe_kernel_write(mem, tmp_raw, count);

return err;
}

int kgdb_validate_break_address(unsigned long addr)
Expand All @@ -715,7 +720,7 @@ int kgdb_validate_break_address(unsigned long addr)
if (IN_MEM(addr, BREAK_INSTR_SIZE, L2_START, L2_LENGTH))
return 0;

return EFAULT;
return -EFAULT;
}

int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr)
Expand Down

0 comments on commit 11aca0e

Please sign in to comment.