From: Qian Cai <cai(a)lca.pw>
Subject: mm/hotplug: fix offline undo_isolate_page_range()
f1dd2cd13c4b ("mm, memory_hotplug: do not associate hotadded memory to
zones until online") introduced move_pfn_range_to_zone() which calls
memmap_init_zone() during onlining a memory block. memmap_init_zone()
will reset pagetype flags and makes migrate type to be MOVABLE.
However, in __offline_pages(), it also call undo_isolate_page_range()
after offline_isolated_pages() to do the same thing. Due to 2ce13640b3f4
("mm: __first_valid_page skip over offline pages") changed
__first_valid_page() to skip offline pages, undo_isolate_page_range() here
just waste CPU cycles looping around the offlining PFN range while doing
nothing, because __first_valid_page() will return NULL as
offline_isolated_pages() has already marked all memory sections within the
pfn range as offline via offline_mem_sections().
Also, after calling the "useless" undo_isolate_page_range() here, it
reaches the point of no returning by notifying MEM_OFFLINE. Those pages
will be marked as MIGRATE_MOVABLE again once onlining. The only thing
left to do is to decrease the number of isolated pageblocks zone counter
which would make some paths of the page allocation slower that the above
commit introduced.
Even if alloc_contig_range() can be used to isolate 16GB-hugetlb pages on
ppc64, an "int" should still be enough to represent the number of
pageblocks there. Fix an incorrect comment along the way.
[cai(a)lca.pw: v4]
Link: http://lkml.kernel.org/r/20190314150641.59358-1-cai@lca.pw
Link: http://lkml.kernel.org/r/20190313143133.46200-1-cai@lca.pw
Fixes: 2ce13640b3f4 ("mm: __first_valid_page skip over offline pages")
Signed-off-by: Qian Cai <cai(a)lca.pw>
Acked-by: Michal Hocko <mhocko(a)suse.com>
Reviewed-by: Oscar Salvador <osalvador(a)suse.de>
Cc: Vlastimil Babka <vbabka(a)suse.cz>
Cc: <stable(a)vger.kernel.org> [4.13+]
Signed-off-by: Andrew Morton <akpm(a)linux-foundation.org>
---
include/linux/page-isolation.h | 10 ------
mm/memory_hotplug.c | 17 ++++++++--
mm/page_alloc.c | 2 -
mm/page_isolation.c | 48 +++++++++++++++++++------------
mm/sparse.c | 2 -
5 files changed, 45 insertions(+), 34 deletions(-)
--- a/include/linux/page-isolation.h~mm-hotplug-fix-offline-undo_isolate_page_range
+++ a/include/linux/page-isolation.h
@@ -41,16 +41,6 @@ int move_freepages_block(struct zone *zo
/*
* Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE.
- * If specified range includes migrate types other than MOVABLE or CMA,
- * this will fail with -EBUSY.
- *
- * For isolating all pages in the range finally, the caller have to
- * free all pages in the range. test_page_isolated() can be used for
- * test it.
- *
- * The following flags are allowed (they can be combined in a bit mask)
- * SKIP_HWPOISON - ignore hwpoison pages
- * REPORT_FAILURE - report details about the failure to isolate the range
*/
int
start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
--- a/mm/memory_hotplug.c~mm-hotplug-fix-offline-undo_isolate_page_range
+++ a/mm/memory_hotplug.c
@@ -1576,7 +1576,7 @@ static int __ref __offline_pages(unsigne
{
unsigned long pfn, nr_pages;
long offlined_pages;
- int ret, node;
+ int ret, node, nr_isolate_pageblock;
unsigned long flags;
unsigned long valid_start, valid_end;
struct zone *zone;
@@ -1602,10 +1602,11 @@ static int __ref __offline_pages(unsigne
ret = start_isolate_page_range(start_pfn, end_pfn,
MIGRATE_MOVABLE,
SKIP_HWPOISON | REPORT_FAILURE);
- if (ret) {
+ if (ret < 0) {
reason = "failure to isolate range";
goto failed_removal;
}
+ nr_isolate_pageblock = ret;
arg.start_pfn = start_pfn;
arg.nr_pages = nr_pages;
@@ -1657,8 +1658,16 @@ static int __ref __offline_pages(unsigne
/* Ok, all of our target is isolated.
We cannot do rollback at this point. */
offline_isolated_pages(start_pfn, end_pfn);
- /* reset pagetype flags and makes migrate type to be MOVABLE */
- undo_isolate_page_range(start_pfn, end_pfn, MIGRATE_MOVABLE);
+
+ /*
+ * Onlining will reset pagetype flags and makes migrate type
+ * MOVABLE, so just need to decrease the number of isolated
+ * pageblocks zone counter here.
+ */
+ spin_lock_irqsave(&zone->lock, flags);
+ zone->nr_isolate_pageblock -= nr_isolate_pageblock;
+ spin_unlock_irqrestore(&zone->lock, flags);
+
/* removal success */
adjust_managed_page_count(pfn_to_page(start_pfn), -offlined_pages);
zone->present_pages -= offlined_pages;
--- a/mm/page_alloc.c~mm-hotplug-fix-offline-undo_isolate_page_range
+++ a/mm/page_alloc.c
@@ -8233,7 +8233,7 @@ int alloc_contig_range(unsigned long sta
ret = start_isolate_page_range(pfn_max_align_down(start),
pfn_max_align_up(end), migratetype, 0);
- if (ret)
+ if (ret < 0)
return ret;
/*
--- a/mm/page_isolation.c~mm-hotplug-fix-offline-undo_isolate_page_range
+++ a/mm/page_isolation.c
@@ -160,27 +160,36 @@ __first_valid_page(unsigned long pfn, un
return NULL;
}
-/*
- * start_isolate_page_range() -- make page-allocation-type of range of pages
- * to be MIGRATE_ISOLATE.
- * @start_pfn: The lower PFN of the range to be isolated.
- * @end_pfn: The upper PFN of the range to be isolated.
- * @migratetype: migrate type to set in error recovery.
+/**
+ * start_isolate_page_range() - make page-allocation-type of range of pages to
+ * be MIGRATE_ISOLATE.
+ * @start_pfn: The lower PFN of the range to be isolated.
+ * @end_pfn: The upper PFN of the range to be isolated.
+ * start_pfn/end_pfn must be aligned to pageblock_order.
+ * @migratetype: Migrate type to set in error recovery.
+ * @flags: The following flags are allowed (they can be combined in
+ * a bit mask)
+ * SKIP_HWPOISON - ignore hwpoison pages
+ * REPORT_FAILURE - report details about the failure to
+ * isolate the range
*
* Making page-allocation-type to be MIGRATE_ISOLATE means free pages in
* the range will never be allocated. Any free pages and pages freed in the
- * future will not be allocated again.
- *
- * start_pfn/end_pfn must be aligned to pageblock_order.
- * Return 0 on success and -EBUSY if any part of range cannot be isolated.
+ * future will not be allocated again. If specified range includes migrate types
+ * other than MOVABLE or CMA, this will fail with -EBUSY. For isolating all
+ * pages in the range finally, the caller have to free all pages in the range.
+ * test_page_isolated() can be used for test it.
*
* There is no high level synchronization mechanism that prevents two threads
- * from trying to isolate overlapping ranges. If this happens, one thread
+ * from trying to isolate overlapping ranges. If this happens, one thread
* will notice pageblocks in the overlapping range already set to isolate.
* This happens in set_migratetype_isolate, and set_migratetype_isolate
- * returns an error. We then clean up by restoring the migration type on
- * pageblocks we may have modified and return -EBUSY to caller. This
+ * returns an error. We then clean up by restoring the migration type on
+ * pageblocks we may have modified and return -EBUSY to caller. This
* prevents two threads from simultaneously working on overlapping ranges.
+ *
+ * Return: the number of isolated pageblocks on success and -EBUSY if any part
+ * of range cannot be isolated.
*/
int start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
unsigned migratetype, int flags)
@@ -188,6 +197,7 @@ int start_isolate_page_range(unsigned lo
unsigned long pfn;
unsigned long undo_pfn;
struct page *page;
+ int nr_isolate_pageblock = 0;
BUG_ON(!IS_ALIGNED(start_pfn, pageblock_nr_pages));
BUG_ON(!IS_ALIGNED(end_pfn, pageblock_nr_pages));
@@ -196,13 +206,15 @@ int start_isolate_page_range(unsigned lo
pfn < end_pfn;
pfn += pageblock_nr_pages) {
page = __first_valid_page(pfn, pageblock_nr_pages);
- if (page &&
- set_migratetype_isolate(page, migratetype, flags)) {
- undo_pfn = pfn;
- goto undo;
+ if (page) {
+ if (set_migratetype_isolate(page, migratetype, flags)) {
+ undo_pfn = pfn;
+ goto undo;
+ }
+ nr_isolate_pageblock++;
}
}
- return 0;
+ return nr_isolate_pageblock;
undo:
for (pfn = start_pfn;
pfn < undo_pfn;
--- a/mm/sparse.c~mm-hotplug-fix-offline-undo_isolate_page_range
+++ a/mm/sparse.c
@@ -567,7 +567,7 @@ void online_mem_sections(unsigned long s
}
#ifdef CONFIG_MEMORY_HOTREMOVE
-/* Mark all memory sections within the pfn range as online */
+/* Mark all memory sections within the pfn range as offline */
void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn)
{
unsigned long pfn;
_
From: Tetsuo Handa <penguin-kernel(a)I-love.SAKURA.ne.jp>
Subject: fs/open.c: allow opening only regular files during execve()
syzbot is hitting lockdep warning [1] due to trying to open a fifo during
an execve() operation. But we don't need to open non regular files during
an execve() operation, for all files which we will need are the executable
file itself and the interpreter programs like /bin/sh and ld-linux.so.2 .
Since the manpage for execve(2) says that execve() returns EACCES when the
file or a script interpreter is not a regular file, and the manpage for
uselib(2) says that uselib() can return EACCES, and we use FMODE_EXEC when
opening for execve()/uselib(), we can bail out if a non regular file is
requested with FMODE_EXEC set.
Since this deadlock followed by khungtaskd warnings is trivially
reproducible by a local unprivileged user, and syzbot's frequent crash due
to this deadlock defers finding other bugs, let's workaround this deadlock
until we get a chance to find a better solution.
[1] https://syzkaller.appspot.com/bug?id=b5095bfec44ec84213bac54742a82483aad578…
Link: http://lkml.kernel.org/r/1552044017-7890-1-git-send-email-penguin-kernel@I-…
Reported-by: syzbot <syzbot+e93a80c1bb7c5c56e522461c149f8bf55eab1b2b(a)syzkaller.appspotmail.com>
Fixes: 8924feff66f35fe2 ("splice: lift pipe_lock out of splice_to_pipe()")
Signed-off-by: Tetsuo Handa <penguin-kernel(a)I-love.SAKURA.ne.jp>
Acked-by: Kees Cook <keescook(a)chromium.org>
Cc: Al Viro <viro(a)zeniv.linux.org.uk>
Cc: Eric Biggers <ebiggers3(a)gmail.com>
Cc: Dmitry Vyukov <dvyukov(a)google.com>
Cc: <stable(a)vger.kernel.org> [4.9+]
Signed-off-by: Andrew Morton <akpm(a)linux-foundation.org>
---
fs/open.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/fs/open.c~fs-allow-opening-only-regular-files-during-execve
+++ a/fs/open.c
@@ -733,6 +733,12 @@ static int do_dentry_open(struct file *f
return 0;
}
+ /* Any file opened for execve()/uselib() has to be a regular file. */
+ if (unlikely(f->f_flags & FMODE_EXEC && !S_ISREG(inode->i_mode))) {
+ error = -EACCES;
+ goto cleanup_file;
+ }
+
if (f->f_mode & FMODE_WRITE && !special_file(inode->i_mode)) {
error = get_write_access(inode);
if (unlikely(error))
_
When the gpio-addr-flash.c driver was merged with physmap-core.c the
code to store the current gpio_values was lost. This meant that once a
gpio was asserted it was never de-asserted. Fix this by storing the
current offset in gpio_values like the old driver used to.
Fixes: commit ba32ce95cbd9 ("mtd: maps: Merge gpio-addr-flash.c into physmap-core.c")
Cc: <stable(a)vger.kernel.org>
Signed-off-by: Chris Packham <chris.packham(a)alliedtelesis.co.nz>
Reviewed-by: Boris Brezillon <boris.brezillon(a)collabora.com>
---
Changes in v2:
- Cc stable, add Boris' review
drivers/mtd/maps/physmap-core.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/mtd/maps/physmap-core.c b/drivers/mtd/maps/physmap-core.c
index d9a3e4bebe5d..21b556afc305 100644
--- a/drivers/mtd/maps/physmap-core.c
+++ b/drivers/mtd/maps/physmap-core.c
@@ -132,6 +132,8 @@ static void physmap_set_addr_gpios(struct physmap_flash_info *info,
gpiod_set_value(info->gpios->desc[i], !!(BIT(i) & ofs));
}
+
+ info->gpio_values = ofs;
}
#define win_mask(order) (BIT(order) - 1)
--
2.21.0
Hello,
We ran automated tests on a patchset that was proposed for merging into this
kernel tree. The patches were applied to:
Kernel repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Commit: 1f6f316a537d - Linux 5.0.5
The results of these automated tests are provided below.
Overall result: PASSED
Merge: OK
Compile: OK
Tests: OK
Please reply to this email if you have any questions about the tests that we
ran or if you have any suggestions on how to make future tests more effective.
,-. ,-.
( C ) ( K ) Continuous
`-',-.`-' Kernel
( I ) Integration
`-'
______________________________________________________________________________
Merge testing
-------------
We cloned this repository and checked out a ref:
Repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Ref: 1f6f316a537d - Linux 5.0.5
We then merged the patchset with `git am`:
bluetooth-check-l2cap-option-sizes-returned-from-l2cap_get_conf_opt.patch
bluetooth-verify-that-l2cap_get_conf_opt-provides-large-enough-buffer.patch
netfilter-nf_tables-fix-set-double-free-in-abort-pat.patch
dccp-do-not-use-ipv6-header-for-ipv4-flow.patch
genetlink-fix-a-memory-leak-on-error-path.patch
gtp-change-net_udp_tunnel-dependency-to-select.patch
ipv6-make-ip6_create_rt_rcu-return-ip6_null_entry-instead-of-null.patch
mac8390-fix-mmio-access-size-probe.patch
misdn-hfcpci-test-both-vendor-device-id-for-digium-hfc4s.patch
net-aquantia-fix-rx-checksum-offload-for-udp-tcp-over-ipv6.patch
net-datagram-fix-unbounded-loop-in-__skb_try_recv_datagram.patch
net-packet-set-__gfp_nowarn-upon-allocation-in-alloc_pg_vec.patch
net-phy-meson-gxl-fix-interrupt-support.patch
net-rose-fix-a-possible-stack-overflow.patch
net-stmmac-fix-memory-corruption-with-large-mtus.patch
net-sysfs-call-dev_hold-if-kobject_init_and_add-success.patch
net-sysfs-fix-memory-leak-in-netdev_register_kobject.patch
net-usb-aqc111-extend-hwid-table-by-qnap-device.patch
packets-always-register-packet-sk-in-the-same-order.patch
rhashtable-still-do-rehash-when-we-get-eexist.patch
sctp-get-sctphdr-by-offset-in-sctp_compute_cksum.patch
sctp-use-memdup_user-instead-of-vmemdup_user.patch
tcp-do-not-use-ipv6-header-for-ipv4-flow.patch
tipc-allow-service-ranges-to-be-connect-ed-on-rdm-dgram.patch
tipc-change-to-check-tipc_own_id-to-return-in-tipc_net_stop.patch
tipc-fix-cancellation-of-topology-subscriptions.patch
tun-properly-test-for-iff_up.patch
vrf-prevent-adding-upper-devices.patch
vxlan-don-t-call-gro_cells_destroy-before-device-is-unregistered.patch
thunderx-enable-page-recycling-for-non-xdp-case.patch
thunderx-eliminate-extra-calls-to-put_page-for-pages-held-for-recycling.patch
net-dsa-mv88e6xxx-fix-few-issues-in-mv88e6390x_port_set_cmode.patch
net-mii-fix-pause-cap-advertisement-from-linkmode_adv_to_lcl_adv_t-helper.patch
net-phy-don-t-clear-bmcr-in-genphy_soft_reset.patch
r8169-fix-cable-re-plugging-issue.patch
ila-fix-rhashtable-walker-list-corruption.patch
Compile testing
---------------
We compiled the kernel for 3 architectures:
aarch64:
make options: make INSTALL_MOD_STRIP=1 -j64 targz-pkg -j64
configuration: https://artifacts.cki-project.org/builds/aarch64/61675e3017f8384e70a9d7c03e…
kernel build: https://artifacts.cki-project.org/builds/aarch64/61675e3017f8384e70a9d7c03e…
ppc64le:
make options: make INSTALL_MOD_STRIP=1 -j64 targz-pkg -j64
configuration: https://artifacts.cki-project.org/builds/ppc64le/24fcf0140e877669a1a30e5961…
kernel build: https://artifacts.cki-project.org/builds/ppc64le/24fcf0140e877669a1a30e5961…
x86_64:
make options: make INSTALL_MOD_STRIP=1 -j64 targz-pkg -j64
configuration: https://artifacts.cki-project.org/builds/x86_64/151946f5db94e46f223b5566ab4…
kernel build: https://artifacts.cki-project.org/builds/x86_64/151946f5db94e46f223b5566ab4…
Hardware testing
----------------
We booted each kernel and ran the following tests:
aarch64:
✅ Boot test [0]
✅ LTP lite - release 20190115 [1]
✅ AMTU (Abstract Machine Test Utility) [2]
🚧 ✅ Networking route: pmtu [3]
🚧 ❎ audit: audit testsuite test [4]
✅ httpd: mod_ssl smoke sanity [5]
✅ httpd: php sanity [6]
🚧 ✅ iotop: sanity [7]
🚧 ✅ /CoreOS/net-snmp/Regression/bz251332-tcp-transport
🚧 ✅ tuned: tune-processes-through-perf [8]
ppc64le:
✅ Boot test [0]
✅ LTP lite - release 20190115 [1]
✅ AMTU (Abstract Machine Test Utility) [2]
🚧 ✅ Networking route: pmtu [3]
🚧 ❎ audit: audit testsuite test [4]
✅ httpd: mod_ssl smoke sanity [5]
✅ httpd: php sanity [6]
🚧 ✅ iotop: sanity [7]
🚧 ✅ /CoreOS/net-snmp/Regression/bz251332-tcp-transport
🚧 ✅ selinux-policy: serge-testsuite [9]
🚧 ✅ tuned: tune-processes-through-perf [8]
x86_64:
✅ Boot test [0]
✅ LTP lite - release 20190115 [1]
✅ AMTU (Abstract Machine Test Utility) [2]
🚧 ✅ Networking route: pmtu [3]
🚧 ❎ audit: audit testsuite test [4]
✅ httpd: mod_ssl smoke sanity [5]
✅ httpd: php sanity [6]
🚧 ✅ iotop: sanity [7]
🚧 ✅ /CoreOS/net-snmp/Regression/bz251332-tcp-transport
🚧 ✅ selinux-policy: serge-testsuite [9]
🚧 ✅ tuned: tune-processes-through-perf [8]
Test source:
[0]: https://github.com/CKI-project/tests-beaker/archive/master.zip#distribution…
[1]: https://github.com/CKI-project/tests-beaker/archive/master.zip#distribution…
[2]: https://github.com/CKI-project/tests-beaker/archive/master.zip#misc/amtu
[3]: https://github.com/CKI-project/tests-beaker/archive/master.zip#/networking/…
[4]: https://github.com/CKI-project/tests-beaker/archive/master.zip#packages/aud…
[5]: https://github.com/CKI-project/tests-beaker/archive/master.zip#packages/htt…
[6]: https://github.com/CKI-project/tests-beaker/archive/master.zip#packages/htt…
[7]: https://github.com/CKI-project/tests-beaker/archive/master.zip#packages/iot…
[8]: https://github.com/CKI-project/tests-beaker/archive/master.zip#packages/tun…
[9]: https://github.com/CKI-project/tests-beaker/archive/master.zip#/packages/se…
Waived tests (marked with 🚧)
-----------------------------
This test run included waived tests. Such tests are executed but their results
are not taken into account. Tests are waived when their results are not
reliable enough, e.g. when they're just introduced or are being fixed.
From: Kan Liang <kan.liang(a)linux.intel.com>
Perf fails to parse uncore event alias, for example:
#perf stat -e unc_m_clockticks -a --no-merge sleep 1
event syntax error: 'unc_m_clockticks'
\___ parser error
Current code assumes that the event alias is from one specific PMU.
To find the PMU, perf strcmp the pmu name of event alias with the
real pmu name on the system.
However, the uncore event alias may be from multiple PMUs with common
prefix. The pmu name of uncore event alias is the common prefix.
For example, UNC_M_CLOCKTICKS is clock event for iMC, which include
6 PMUs with the same prefix "uncore_imc" on a skylake server.
The real pmu names on the system for iMC are uncore_imc_0 ...
uncore_imc_5.
The strncmp is used to only check the common prefix for uncore
event alias.
With the patch,
#perf stat -e unc_m_clockticks -a --no-merge sleep 1
Performance counter stats for 'system wide':
723,594,722 unc_m_clockticks [uncore_imc_5]
724,001,954 unc_m_clockticks [uncore_imc_3]
724,042,655 unc_m_clockticks [uncore_imc_1]
724,161,001 unc_m_clockticks [uncore_imc_4]
724,293,713 unc_m_clockticks [uncore_imc_2]
724,340,901 unc_m_clockticks [uncore_imc_0]
1.002090060 seconds time elapsed
Signed-off-by: Kan Liang <kan.liang(a)linux.intel.com>
Cc: Thomas Richter <tmricht(a)linux.ibm.com>
Cc: stable(a)vger.kernel.org
Fixes: ea1fa48c055f ("perf stat: Handle different PMU names with common prefix")
---
tools/perf/util/pmu.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index 51d437f..395308f 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -732,10 +732,20 @@ static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu)
if (!is_arm_pmu_core(name)) {
pname = pe->pmu ? pe->pmu : "cpu";
+
+ /*
+ * uncore alias may be from different PMU
+ * with common prefix
+ */
+ if (pmu_is_uncore(name) &&
+ !strncmp(pname, name, strlen(pname)))
+ goto new_alias;
+
if (strcmp(pname, name))
continue;
}
+new_alias:
/* need type casts to override 'const' */
__perf_pmu__new_alias(head, NULL, (char *)pe->name,
(char *)pe->desc, (char *)pe->event,
--
2.7.4
On Fri, Mar 15, 2019 at 03:43:21PM -0700, anil.kumar.k(a)intel.com wrote:
> From: Anil Kumar <anil.kumar.k(a)intel.com>
>
> typec_register_port function used variable port->id without
> initializing it. This patch fixes the issue by using the local
> instance for the error case
>
> Issue is not observed in the mainline tree (5.x)
>
> Signed-off-by: Anil Kumar <anil.kumar.k(a)intel.com>
> Fixes: bdecb33af34f ("usb: typec: API for controlling USB Type-C Multiplexers")
> Cc: stable(a)vger.kernel.org #4.19.x
You have the tag, but I don't see stable(a)vger.kernel.org on your CC
line? I'm adding it there now. The patch is otherwise OK.
Acked-by: Heikki Krogerus <heikki.krogerus(a)linux.intel.com>
> ---
> drivers/usb/typec/class.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
> index e61dffb..5a442e4 100644
> --- a/drivers/usb/typec/class.c
> +++ b/drivers/usb/typec/class.c
> @@ -1611,7 +1611,7 @@ struct typec_port *typec_register_port(struct device *parent,
> typec_switch_put(port->sw);
>
> err_switch:
> - ida_simple_remove(&typec_index_ida, port->id);
> + ida_simple_remove(&typec_index_ida, id);
> kfree(port);
>
> return ERR_PTR(ret);
> --
> 2.7.4
thanks,
--
heikki