Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/phy/marvell.c Simple overlapping changes in drivers/net/phy/marvell.c Signed-off-by: David S. Miller <davem@davemloft.net>
这个提交包含在:
@@ -131,7 +131,9 @@ void __bitmap_shift_right(unsigned long *dst,
|
||||
lower = src[off + k];
|
||||
if (left && off + k == lim - 1)
|
||||
lower &= mask;
|
||||
dst[k] = upper << (BITS_PER_LONG - rem) | lower >> rem;
|
||||
dst[k] = lower >> rem;
|
||||
if (rem)
|
||||
dst[k] |= upper << (BITS_PER_LONG - rem);
|
||||
if (left && k == lim - 1)
|
||||
dst[k] &= mask;
|
||||
}
|
||||
@@ -172,7 +174,9 @@ void __bitmap_shift_left(unsigned long *dst,
|
||||
upper = src[k];
|
||||
if (left && k == lim - 1)
|
||||
upper &= (1UL << left) - 1;
|
||||
dst[k + off] = lower >> (BITS_PER_LONG - rem) | upper << rem;
|
||||
dst[k + off] = upper << rem;
|
||||
if (rem)
|
||||
dst[k + off] |= lower >> (BITS_PER_LONG - rem);
|
||||
if (left && k + off == lim - 1)
|
||||
dst[k + off] &= (1UL << left) - 1;
|
||||
}
|
||||
|
@@ -160,3 +160,32 @@ unsigned long long memparse(const char *ptr, char **retptr)
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(memparse);
|
||||
|
||||
/**
|
||||
* parse_option_str - Parse a string and check an option is set or not
|
||||
* @str: String to be parsed
|
||||
* @option: option name
|
||||
*
|
||||
* This function parses a string containing a comma-separated list of
|
||||
* strings like a=b,c.
|
||||
*
|
||||
* Return true if there's such option in the string, or return false.
|
||||
*/
|
||||
bool parse_option_str(const char *str, const char *option)
|
||||
{
|
||||
while (*str) {
|
||||
if (!strncmp(str, option, strlen(option))) {
|
||||
str += strlen(option);
|
||||
if (!*str || *str == ',')
|
||||
return true;
|
||||
}
|
||||
|
||||
while (*str && *str != ',')
|
||||
str++;
|
||||
|
||||
if (*str == ',')
|
||||
str++;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@@ -203,10 +203,10 @@ void __sg_free_table(struct sg_table *table, unsigned int max_ents,
|
||||
}
|
||||
|
||||
table->orig_nents -= sg_size;
|
||||
if (!skip_first_chunk) {
|
||||
free_fn(sgl, alloc_size);
|
||||
if (skip_first_chunk)
|
||||
skip_first_chunk = false;
|
||||
}
|
||||
else
|
||||
free_fn(sgl, alloc_size);
|
||||
sgl = next;
|
||||
}
|
||||
|
||||
|
16
lib/string.c
16
lib/string.c
@@ -598,6 +598,22 @@ void *memset(void *s, int c, size_t count)
|
||||
EXPORT_SYMBOL(memset);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* memzero_explicit - Fill a region of memory (e.g. sensitive
|
||||
* keying data) with 0s.
|
||||
* @s: Pointer to the start of the area.
|
||||
* @count: The size of the area.
|
||||
*
|
||||
* memzero_explicit() doesn't need an arch-specific version as
|
||||
* it just invokes the one of memset() implicitly.
|
||||
*/
|
||||
void memzero_explicit(void *s, size_t count)
|
||||
{
|
||||
memset(s, 0, count);
|
||||
OPTIMIZER_HIDE_VAR(s);
|
||||
}
|
||||
EXPORT_SYMBOL(memzero_explicit);
|
||||
|
||||
#ifndef __HAVE_ARCH_MEMCPY
|
||||
/**
|
||||
* memcpy - Copy one area of memory to another
|
||||
|
在新工单中引用
屏蔽一个用户