Received: by 10.223.176.46 with SMTP id f43csp1427686wra; Fri, 19 Jan 2018 11:22:56 -0800 (PST) X-Google-Smtp-Source: ACJfBouvFmvsFYW4N1uQJrikv03D9EpT8xazTKcLsyy9DspE5EvWczzMNE/4E57i0kGC3B8v2Hv6 X-Received: by 10.99.165.87 with SMTP id r23mr21022109pgu.93.1516389776810; Fri, 19 Jan 2018 11:22:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516389776; cv=none; d=google.com; s=arc-20160816; b=oBc1KOjocw1nZkuN8SlskylP0uuJnPqYMc13DeG2FsQXmkpmQh+tkq4N6Qp+CncTBf fqb1EIB6aA35/2EojZk0IYzH5+DK8aX2u5XGlqb4EootudRn05qV2XBm0P/o7W6EYvPZ MYd2iOC2wzGZGXxInTLCx9NWxs/WKI4Xg0Ay5m/Wc0ykJm8rdUNLwsLAPlxW4gfJER2i DsRTIV5kJxtgHoH/wc9cRxxVSepvT8SyEjw78gEbUCj2Pn8Fz2nvNoPCXRJ61nWj9xkn EzRcwoxmGsRjlnMX6XIUwlx2k0S5CqnRf7UnA4rhxvZSVdKRyYeakEt/1MK1VifZOOwY 0b8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature:arc-authentication-results; bh=gCcJ/HcBCl7KjCmqPkOhO3hv5/g4q19EKNWGm8KTjp8=; b=JDHXNewKH+ZXBB0Ul0v8tak740GRhNFFs9Ox1xuZuaq8CG2+YA5OXj8maa3N16uYUN 3Dk7BZXHTd/WeQY5wuEJGjFlpHLJU1CfwfCjluRE/grDZNcEUcsHBrUSMWkeD2z6p9Ct kEM3rJD59eM7SsWWoT0+pF6IAUEU0xgccC8JFhWwjciSKgM4junIIomNl5a+keScPTFn L+EuuuFrZ482mCRl6j4RKLMoqI88OMkPPshLHPJ0rHJCuYTF7c6j80U9F8fIP/Nn3uHB BucBl5Nyp2yJYye2HNES35TsE/vTvRhBpsj9Cpu/vcNsJbUWjW0L0A5JReLPj/odrqKW lDhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector1 header.b=habbM4vA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w17si8957452pgm.363.2018.01.19.11.22.41; Fri, 19 Jan 2018 11:22:56 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector1 header.b=habbM4vA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756427AbeASTUu (ORCPT + 99 others); Fri, 19 Jan 2018 14:20:50 -0500 Received: from mail-he1eur01on0115.outbound.protection.outlook.com ([104.47.0.115]:15191 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756359AbeASTUh (ORCPT ); Fri, 19 Jan 2018 14:20:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=gCcJ/HcBCl7KjCmqPkOhO3hv5/g4q19EKNWGm8KTjp8=; b=habbM4vALmg24MXDlVeSf14nmmJIXcmOWFlvKp1DWXQH1ZjwU8X5iQxFhKpuAzzCl1yfIMdm3iRaWw7cjip086PTPe4kmUFQuyPuhjqxPU3wPaCzHu3Slswf30iR3uWob4tVEZxQdiW9JoAtAKYgHic2YkaMCBz9OvF9l7VlEbI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=eshatokhin@virtuozzo.com; Received: from [192.168.0.101] (95.25.142.121) by DB6PR0802MB2440.eurprd08.prod.outlook.com (2603:10a6:4:a0::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Fri, 19 Jan 2018 19:20:32 +0000 Subject: Re: [PATCH v5 0/3] livepatch: introduce atomic replace To: Jason Baron , linux-kernel@vger.kernel.org, live-patching@vger.kernel.org Cc: jpoimboe@redhat.com, jeyu@kernel.org, jikos@kernel.org, mbenes@suse.cz, pmladek@suse.com References: From: Evgenii Shatokhin Message-ID: Date: Fri, 19 Jan 2018 22:20:27 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [95.25.142.121] X-ClientProxiedBy: AM5PR0601CA0037.eurprd06.prod.outlook.com (2603:10a6:203:68::23) To DB6PR0802MB2440.eurprd08.prod.outlook.com (2603:10a6:4:a0::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 60aa5d30-aa65-4df3-8290-08d55f71b5fa X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:DB6PR0802MB2440; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2440;3:t557bwCv1DxUZkcaPPfr88cdhKAoCBbqGMGN8d07+QPf0cyAMsywW3+FDYNgS5rHXPbx4mYvcuFeAHmL9jwcUOOaD1e/Bt8y0q2WW8A+gveKcquJAo00tHIh5HfQZ7oTcYFW990lmYtMTU/bZxecfDKAsTEWot4a7dyBjUNj4g/EmvRXhpomYrkdHRpEYHElLmZS/mbPpcIiEtwiz8Ib8qVOeagB6naClkQRJ1y0OvdBCUDWb6x2bGQujvHVR95e;25:kGtbW26v6eSEw7Ts50eClO4d82AYCN59AsQxFtbwTNwEGvfH8bFUsUPEcAMgjwq+n6XGMBpp3Oeyf5BDbel7daLQ00qLr5S3ugLP1C0UdW8OXGfSKLk9ctKVdi7zGTJI7gMLPGdz+T1F13u91zy+54m9EPkbEbSEkhTAoXsqsvsgGYpKgN2ZYeRCVdt1rXUKBhqEwcCuUgj+nIuaUK1aR/5mNDIXbciF5gp7/wSe9jh4TwBYy9hVeDt0UrncU6x0hS8HQJgd+hAM8WwXipNEnXy1gOq94Lj3jjAAMWL39XYdx8q/mXT5hTOsghiWJAMnTDSgBTW/5prDhbLa4mU9Zw==;31:CuO5v03UwMOKOvRhRVC8++Jzeg2xTKll8PCqj7wDMrRJMOL5JXMP2rI0dTyS/RduO42ADfA98/l9b05IBFG+ChHTPyLXw8cesig3VVVYf/HBepbZ2v9OOC/8jLA6Z4EDuYo19PhzvVE5bEiGlWJ4Gfb2s6xiZ9X9N7klMeNCYcx1wzIXU9LYVrw/Lp+qPQ8SluxCLEDfk23HUcbY+wkanfb3NgsPkFRS3ia+Vn0eI6c= X-MS-TrafficTypeDiagnostic: DB6PR0802MB2440: X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2440;20:rdA2A+4nRi2bbdrGeIXYve0HCw9IdgdvUwf8oGBBU9AyUMXbJCcJivC05AdgMHOu/QKtSVt4nAq5m9jx2VMMplKgvdpS4kBDqp0Lqc2GkbFyQb/n6FnqRJJ9uNsYENkzoxlcMI0qp9Db6BMyJfrIPzc/Pb1ubbwWLKvps+983v/tO1g/tapLbMKVIcwSp4P/IybfYX69Xu/iE+RYgBpX6lRxiuauQ2H03eXF5ZuVcQz81fZLol8Q1EQvw8lNqiBKWPfISsxvJEiVUs3GPbC01cfPW6FVPGXjvvA1XVjBNgD3U8NFPZIVT2XyMikO1ajrjgHKfbmGbpmEjg9ejmtCOWsfulnHen1NypQouCcOWs/GTXmBavGYTp8kUFfSi3BuyNBO+eukwT3gnzRLoGp8mQHJPU/SCAHRvz/MQhgvGZE=;4:n5CbON+Ei1EnFpxqojSodnVKXZb8bD6pFRbBasAx08R2aFrJ6445FExiYtVgZIJtEB9++rKn2sGPnNzpJzx3oku+CO4VcLGvMXkk5Z5lME38XKXFby57Az7rFjyCosetvjPM/sJEFkO5L5d64ezqspQd+cxREk3aTcGduwnklDT1i2zeAAH8/4aZ+E2Hw2E4YW91xZlHuu+FE3QTYU+ewr9sNExyrIGwYIaQfDpBQn+TP2ZknVZPEJWL0CXNxaeNihjxkHN19CUnlzKtwHSUEqqRtfJ2nprOAxeFpniyX7aJcAoMIqZ3bpNkOJcT4dflbDKG6qZPAImqLftPX06bSg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089)(218171748494069); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3231023)(2400081)(944501161)(3002001)(6041268)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(6072148)(201708071742011);SRVR:DB6PR0802MB2440;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:DB6PR0802MB2440; X-Forefront-PRVS: 0557CBAD84 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(396003)(376002)(39850400004)(39380400002)(366004)(346002)(189003)(199004)(50466002)(2906002)(478600001)(64126003)(53936002)(8676002)(36756003)(316002)(81166006)(966005)(6306002)(81156014)(65956001)(305945005)(26005)(6116002)(7736002)(3846002)(47776003)(59450400001)(53546011)(66066001)(65806001)(31696002)(67846002)(6486002)(2486003)(23676004)(65826007)(5660300001)(117156002)(52116002)(106356001)(97736004)(8936002)(229853002)(6246003)(6666003)(230700001)(76176011)(68736007)(31686004)(386003)(105586002)(2950100002)(4326008)(16526018)(25786009)(83506002)(58126008)(86362001)(77096007)(52146003)(16576012);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0802MB2440;H:[192.168.0.101];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjZQUjA4MDJNQjI0NDA7MjM6Q3o3M05BM0l5R0xPbGZ2dXQvaW55dHlh?= =?utf-8?B?ZzFSRUYrUXY5TWJvaWYzZS9lODNRb2pxbWNqNXNQSmdZL1Uzc0hHTHIyK1E2?= =?utf-8?B?bkxRSTY1cTVVeUlkK0c5UUFhQkZ4clZsT0tLYysrOW5rb1BQY0g1SkJzU2gy?= =?utf-8?B?OFdPSExUSGgweFlxNDZZRnovblZ6b3BtcktRN0VVMHUzWXhRc1lSNDdrWnpy?= =?utf-8?B?TE9VaWhKdjNNUllKQTBBV1Z3UzRUN1VseVZTZC9TeVlZanlPTWZGSitRbnJx?= =?utf-8?B?QlZWT2hBTFRDS1NBUVF2U1hNWGxjbVNIVHljVU5qS1NtVjFnUU1uMG1YMkxX?= =?utf-8?B?Z052Y0p3VDhneWw1ditUNWlUS2s2Z2RPK0RYRHV3U0JXRzdpSDFTK1dPOWxy?= =?utf-8?B?L2dGV01UQmZuOU9ZOVg0QkdWdGQ3bWJ3L25NKzFhZkJ5YmUyRVRiYUxrQnJ2?= =?utf-8?B?YW1nWmFHVjZYMDI3aHl1R1ZNVTk1N1FGcFd6a09XdmZHcklqTHBqRVNwUlpz?= =?utf-8?B?YXNFTGtpYmxhUzJrRGV6TGZocWZpbDZiRkRxU0RqbnFWditVWTNWbmYwRXJO?= =?utf-8?B?dDIyYnhVZFo3YUZPT2JWcDduMnhLY05PbmNwRWpRQ2RhSlUrR2wxN3MzMXhH?= =?utf-8?B?Y2dvdzg3WGZCUldSYlVDZ0RwYUg4dUlVY0VaVk8zQ01CWFAxY0EzNkFxT2V3?= =?utf-8?B?eG10SHVWTUh2RWJLWTlZMDJiSmM5TjZGRzQ5NUlHT1I5a1lDZzFSMjh4VDQw?= =?utf-8?B?SlpZQzdadTAraHRKRlVXK0Z5UjEzcUl2MVk2RllNY3hlWFJXMHo0WkJPdUhK?= =?utf-8?B?OFV3WDBCYm5rUkxtUy9kTkp1QXRodHJIQWh1ZXVRVWpidUcvV0VmcHdPNzlE?= =?utf-8?B?YlNHNnNYUHJXckxGOTBxRVhmb1JNSkFRcXJ4emFpMS9sSWhROEdxdFp6MjRy?= =?utf-8?B?YkNoU3RLUmdmTjNmd1B4bzZJUUlGR3BhSDNPWHQyYzY4RDdmYWljMjdtcnBB?= =?utf-8?B?dzhjSWdiQTlGbE03cllJU3NpOEhNdFNZbzFsdWNSdlAzY1VGbXdETVQySnJu?= =?utf-8?B?L1ZRNTNIUkkrbVhKQzEyZGlXcCtMT3hpQ2lDZmZ5MVIveHFsUHkwRUFaV1dt?= =?utf-8?B?RlBBalFINm14Z2hlOTF4dHd2Q2VpcVRNd0YzL09nVkpjcDIzUFUybXVoM280?= =?utf-8?B?T2pta1pmQUtiVFBjemE2V0lhUmpWc0tpVW1HQXY0T3FIL3lkUXlENG5rZXRq?= =?utf-8?B?Z0lLeVA3RmVjNlZUMitvdDFURzliNUJZNTNaNWhoeDZVVk1sTGQzZlNXOVUx?= =?utf-8?B?NjlyL3RFWU5MZWRJK1JyNXFjOFV1QWZBMWgzcG5ENjdOdG9hUGlvODUzcGhH?= =?utf-8?B?QXJGZmlYR0FNYzYwZ1hVa1ordktZQXFqMmNKUTBEUU5xc2h0Mm1vOXVCQThM?= =?utf-8?B?NzUvQVZ0ZFRtNEFQRXpDTFF3UHlKWmNGdjZtQ21RUklLdnZIMmE2ek1kUFlO?= =?utf-8?B?Zzg3ekZzKzJOR05ieTFxT2owNW81UXpESTBSRzJIUG5Mb0p6NEViYzdqUW5q?= =?utf-8?B?b1lldThMK3lVMkF5NXVVRFB3TWVsN2pnby8rTDVUNVFzRFVNU1l2YkRLWlpw?= =?utf-8?B?SWZaQXNZTG1zZmUvUlN1V2psR3ZJMGs1MHlQa2xLUm5aUkdKT0I0TXUzRjNP?= =?utf-8?B?YllmdFdUQ1JDem1CSzFiNUZ3N2Nac0xXRTJKQTJSZThMUVVTcTd6TkR3Zk01?= =?utf-8?B?MGJWTWxUWW5GcFA0MWhIMWtSWFp0RWlnNVBOcHRlUlFIOUtjWXpXOVJ1ZmxU?= =?utf-8?B?S1p4YlVVMExtN0tyNmlENEtvV2FmS0ZhdVJqb3ZHWHFTZG9DTGNMeC9sZEQ3?= =?utf-8?B?c2x1RFYzNVdWcnBpbzg2bDhqV044djJ5c1cyOERaZ25qdmZ2TXZySkZXOEVW?= =?utf-8?B?bDNYeExQaWVRdXc9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2440;6:Gl/VqAWEJSpx0NyRvuc7mDQMcT9SFy3UQWoyMQlRekSU2mjQjY1OyUsQh9FBdztZnAhZRWubW6xj4WGiZjU9+ZVt4N648DB0ZwNQrtai6j3i0ML5FHA8VFUN4/DqNtI2njfHV3n1vPJ1Xb9I79sND8vxiJFzd7kluJg9J9YyikkM8FUgnD+0rPg+0JqdgLLWmQi70Ha7jfj2skBpuDbG4mx5eNEV/zyjSzUvW9J2N17LObIsOtjMRARj2zPvC/BhpeaZdn7P/yzhF0BfM7MTD1gkwpJfa4igOSFCGXKBtusiR+xDGoQELkSY+L7SUy+33i9pex9+n/HHNVRd3bnF3M6UhoWy5mpiipjV/u+OXHU=;5:ADjgKff4i0F1nYqKEe2unI8mH59Ac/d5yF8cBBycjllRhopR1fzHSQ1p57kAmTRXKuSqEMtjfXMHNJDcpImc8odjmO08+krdYqsolfPK9lND61mOvEIQrhQvouYspH8vkXUEwj/wCiCBPdfEsohVOJ/8FLchOOIAmDDw5VkT7G4=;24:JdKRUWoq1RBjZ8stIDJgB8D9TptnQAlTyEXSzOpn4iefqvnRcFl2sKwdMsWrt2BZ05Xp5qn/5qovoMQVuxLXCk7J4d7tghYFsR68yRFpBXY=;7:tLKQGC71eXnFOgXq6MpmgGm4vd92IUwFWKyaym9Ck4+QljiCXu//ULRMo235lbmu5oFjpI+mggqUmm1a9DpzJEeeDda5keHbmFGVKWkc2bHcU9JlqNdn2MrxZfCG9iCyvGBuB26P3VXX8fBNYl9J7EaP1qatM8CbEN8ZrleRGtIwUJzeUkVAPs/p9WR68fwRkL2UPtyvEoaWjXlVywmXAVL9PFK0pS1dBcccCRQTD+nWjOLw5uNPd8RLqXYcSph0 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2440;20:rgbGA+vGk1LQ0w/tdpOsl5/r8pr3mYcrFDcdwB15KsxbLATw3G0mxWMsnzaoo1Kb6R59l8dOORToUaRYNGBMqtya94o+6WsDaHQaUU1cyNo3F5f6sy3jpttwjiOC6OPTLdEPbDIC792TtZ+Cfoo0Qgmvq3RDNOGsort1mdopYOE= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jan 2018 19:20:32.5267 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 60aa5d30-aa65-4df3-8290-08d55f71b5fa X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2440 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12.01.2018 22:55, Jason Baron wrote: > Hi, > > While using livepatch, I found that when doing cumulative patches, if a patched > function is completed reverted by a subsequent patch (back to its original state) > livepatch does not revert the funtion to its original state. Specifically, if > patch A introduces a change to function 1, and patch B reverts the change to > function 1 and introduces changes to say function 2 and 3 as well, the change > that patch A introduced to function 1 is still present. This could be addressed > by first completely removing patch A (disable and then rmmod) and then inserting > patch B (insmod and enable), but this leaves an unpatched window. In discussing > this issue with Josh on the kpatch mailing list, he mentioned that we could get > 'atomic replace working properly', and that is the direction of this patchset: > https://www.redhat.com/archives/kpatch/2017-June/msg00005.html > > Thanks, > > -Jason Thanks a lot! Atomic replace is really crucial when using cumulative patches. There is one more thing that might need attention here. In my experiments with this patch series, I saw that unpatch callbacks are not called for the older binary patch (the one being replaced). That is, I have prepared 2 binary patches, each has all 4 patch/unpatch callbacks. When I load the first patch, its pre-patch and post-patch callbacks are called as expected. Then I replace it with the second patch. Replacement is successful, the pre-patch and post-patch callbacks are called for the second patch, However, pre-unpatch and post-unpatch callbacks do not run for the first one. This makes it more difficult to clean up what its pre/post-patch callbacks have done. It would be nice if pre-/post- unpatch callbacks were called for the first patch, perhaps, before/after the patch is actually disabled during replacement. I cannot see right now though, which way is the best to implement that. > > v4-v5 > -re-base onto remove-immediate branch (removing immediate dependencies) > -replaced modules can be re-enabled by doing rmmod and then insmod > > v3-v4: > -add static patch, objects, funcs to linked lists to simplify iterator > -break-out pure function movement as patch 2/3 > > v2-v3: > -refactor how the dynamic nops are calculated (Petr Mladek) > -move the creation of dynamic nops to enable/disable paths > -add klp_replaced_patches list to indicate patches that can be re-enabled > -dropped 'replaced' field > -renamed dynamic fields in klp_func, object and patch > -moved iterator implementation to kernel/livepatch/core.c > -'inherit' nop immediate flag > -update kobject_put free'ing logic (Petr Mladek) > > v1-v2: > -removed the func_iter and obj_iter (Petr Mladek) > -initialiing kobject structure for no_op functions using: > klp_init_object() and klp_init_func() > -added a 'replace' field to klp_patch, similar to the immediate field > -a 'replace' patch now disables all previous patches > -tried to shorten klp_init_patch_no_ops()... > -Simplified logic klp_complete_transition (Petr Mladek) > > Jason Baron (3): > livepatch: use lists to manage patches, objects and functions > livepatch: shuffle core.c function order > livepatch: add atomic replace > > include/linux/livepatch.h | 25 +- > kernel/livepatch/core.c | 626 ++++++++++++++++++++++++++++++------------ > kernel/livepatch/core.h | 6 + > kernel/livepatch/patch.c | 22 +- > kernel/livepatch/patch.h | 4 +- > kernel/livepatch/transition.c | 49 +++- > 6 files changed, 537 insertions(+), 195 deletions(-) > Regards, Evgenii