Merge tag 'char-misc-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
Pull char/misc driver updates from Greg KH: "Here is the big char/misc driver update for 4.14-rc1. Lots of different stuff in here, it's been an active development cycle for some reason. Highlights are: - updated binder driver, this brings binder up to date with what shipped in the Android O release, plus some more changes that happened since then that are in the Android development trees. - coresight updates and fixes - mux driver file renames to be a bit "nicer" - intel_th driver updates - normal set of hyper-v updates and changes - small fpga subsystem and driver updates - lots of const code changes all over the driver trees - extcon driver updates - fmc driver subsystem upadates - w1 subsystem minor reworks and new features and drivers added - spmi driver updates Plus a smattering of other minor driver updates and fixes. All of these have been in linux-next with no reported issues for a while" * tag 'char-misc-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (244 commits) ANDROID: binder: don't queue async transactions to thread. ANDROID: binder: don't enqueue death notifications to thread todo. ANDROID: binder: Don't BUG_ON(!spin_is_locked()). ANDROID: binder: Add BINDER_GET_NODE_DEBUG_INFO ioctl ANDROID: binder: push new transactions to waiting threads. ANDROID: binder: remove proc waitqueue android: binder: Add page usage in binder stats android: binder: fixup crash introduced by moving buffer hdr drivers: w1: add hwmon temp support for w1_therm drivers: w1: refactor w1_slave_show to make the temp reading functionality separate drivers: w1: add hwmon support structures eeprom: idt_89hpesx: Support both ACPI and OF probing mcb: Fix an error handling path in 'chameleon_parse_cells()' MCB: add support for SC31 to mcb-lpc mux: make device_type const char: virtio: constify attribute_group structures. Documentation/ABI: document the nvmem sysfs files lkdtm: fix spelling mistake: "incremeted" -> "incremented" perf: cs-etm: Fix ETMv4 CONFIGR entry in perf.data file nvmem: include linux/err.h from header ...
Šī revīzija ir iekļauta:
@@ -138,14 +138,17 @@ void print_usage(char *argv[])
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int fcopy_fd, len;
|
||||
int fcopy_fd;
|
||||
int error;
|
||||
int daemonize = 1, long_index = 0, opt;
|
||||
int version = FCOPY_CURRENT_VERSION;
|
||||
char *buffer[4096 * 2];
|
||||
struct hv_fcopy_hdr *in_msg;
|
||||
union {
|
||||
struct hv_fcopy_hdr hdr;
|
||||
struct hv_start_fcopy start;
|
||||
struct hv_do_fcopy copy;
|
||||
__u32 kernel_modver;
|
||||
} buffer = { };
|
||||
int in_handshake = 1;
|
||||
__u32 kernel_modver;
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"help", no_argument, 0, 'h' },
|
||||
@@ -195,32 +198,31 @@ int main(int argc, char *argv[])
|
||||
* In this loop we process fcopy messages after the
|
||||
* handshake is complete.
|
||||
*/
|
||||
len = pread(fcopy_fd, buffer, (4096 * 2), 0);
|
||||
ssize_t len;
|
||||
|
||||
len = pread(fcopy_fd, &buffer, sizeof(buffer), 0);
|
||||
if (len < 0) {
|
||||
syslog(LOG_ERR, "pread failed: %s", strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (in_handshake) {
|
||||
if (len != sizeof(kernel_modver)) {
|
||||
if (len != sizeof(buffer.kernel_modver)) {
|
||||
syslog(LOG_ERR, "invalid version negotiation");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
kernel_modver = *(__u32 *)buffer;
|
||||
in_handshake = 0;
|
||||
syslog(LOG_INFO, "kernel module version: %d",
|
||||
kernel_modver);
|
||||
syslog(LOG_INFO, "kernel module version: %u",
|
||||
buffer.kernel_modver);
|
||||
continue;
|
||||
}
|
||||
|
||||
in_msg = (struct hv_fcopy_hdr *)buffer;
|
||||
|
||||
switch (in_msg->operation) {
|
||||
switch (buffer.hdr.operation) {
|
||||
case START_FILE_COPY:
|
||||
error = hv_start_fcopy((struct hv_start_fcopy *)in_msg);
|
||||
error = hv_start_fcopy(&buffer.start);
|
||||
break;
|
||||
case WRITE_TO_FILE:
|
||||
error = hv_copy_data((struct hv_do_fcopy *)in_msg);
|
||||
error = hv_copy_data(&buffer.copy);
|
||||
break;
|
||||
case COMPLETE_FCOPY:
|
||||
error = hv_copy_finished();
|
||||
@@ -231,7 +233,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
default:
|
||||
syslog(LOG_ERR, "Unknown operation: %d",
|
||||
in_msg->operation);
|
||||
buffer.hdr.operation);
|
||||
|
||||
}
|
||||
|
||||
|
@@ -1136,7 +1136,7 @@ static int process_ip_string(FILE *f, char *ip_string, int type)
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
char str[256];
|
||||
char sub_str[10];
|
||||
char sub_str[13];
|
||||
int offset = 0;
|
||||
|
||||
memset(addr, 0, sizeof(addr));
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/poll.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <mntent.h>
|
||||
@@ -30,6 +31,7 @@
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/hyperv.h>
|
||||
#include <syslog.h>
|
||||
#include <getopt.h>
|
||||
@@ -70,6 +72,7 @@ static int vss_operate(int operation)
|
||||
char match[] = "/dev/";
|
||||
FILE *mounts;
|
||||
struct mntent *ent;
|
||||
struct stat sb;
|
||||
char errdir[1024] = {0};
|
||||
unsigned int cmd;
|
||||
int error = 0, root_seen = 0, save_errno = 0;
|
||||
@@ -92,6 +95,10 @@ static int vss_operate(int operation)
|
||||
while ((ent = getmntent(mounts))) {
|
||||
if (strncmp(ent->mnt_fsname, match, strlen(match)))
|
||||
continue;
|
||||
if (stat(ent->mnt_fsname, &sb) == -1)
|
||||
continue;
|
||||
if (S_ISBLK(sb.st_mode) && major(sb.st_rdev) == LOOP_MAJOR)
|
||||
continue;
|
||||
if (hasmntopt(ent, MNTOPT_RO) != NULL)
|
||||
continue;
|
||||
if (strcmp(ent->mnt_type, "vfat") == 0)
|
||||
|
@@ -24,6 +24,12 @@
|
||||
/* ETMv3.5/PTM's ETMCR config bit */
|
||||
#define ETM_OPT_CYCACC 12
|
||||
#define ETM_OPT_TS 28
|
||||
#define ETM_OPT_RETSTK 29
|
||||
|
||||
/* ETMv4 CONFIGR programming bits for the ETM OPTs */
|
||||
#define ETM4_CFG_BIT_CYCACC 4
|
||||
#define ETM4_CFG_BIT_TS 11
|
||||
#define ETM4_CFG_BIT_RETSTK 12
|
||||
|
||||
static inline int coresight_get_trace_id(int cpu)
|
||||
{
|
||||
|
@@ -266,6 +266,32 @@ static u64 cs_etm_get_config(struct auxtrace_record *itr)
|
||||
return config;
|
||||
}
|
||||
|
||||
#ifndef BIT
|
||||
#define BIT(N) (1UL << (N))
|
||||
#endif
|
||||
|
||||
static u64 cs_etmv4_get_config(struct auxtrace_record *itr)
|
||||
{
|
||||
u64 config = 0;
|
||||
u64 config_opts = 0;
|
||||
|
||||
/*
|
||||
* The perf event variable config bits represent both
|
||||
* the command line options and register programming
|
||||
* bits in ETMv3/PTM. For ETMv4 we must remap options
|
||||
* to real bits
|
||||
*/
|
||||
config_opts = cs_etm_get_config(itr);
|
||||
if (config_opts & BIT(ETM_OPT_CYCACC))
|
||||
config |= BIT(ETM4_CFG_BIT_CYCACC);
|
||||
if (config_opts & BIT(ETM_OPT_TS))
|
||||
config |= BIT(ETM4_CFG_BIT_TS);
|
||||
if (config_opts & BIT(ETM_OPT_RETSTK))
|
||||
config |= BIT(ETM4_CFG_BIT_RETSTK);
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
static size_t
|
||||
cs_etm_info_priv_size(struct auxtrace_record *itr __maybe_unused,
|
||||
struct perf_evlist *evlist __maybe_unused)
|
||||
@@ -363,7 +389,7 @@ static void cs_etm_get_metadata(int cpu, u32 *offset,
|
||||
magic = __perf_cs_etmv4_magic;
|
||||
/* Get trace configuration register */
|
||||
info->priv[*offset + CS_ETMV4_TRCCONFIGR] =
|
||||
cs_etm_get_config(itr);
|
||||
cs_etmv4_get_config(itr);
|
||||
/* Get traceID from the framework */
|
||||
info->priv[*offset + CS_ETMV4_TRCTRACEIDR] =
|
||||
coresight_get_trace_id(cpu);
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user