From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 1/2] shmem: Support for registration of Driver/file owner specific ops Date: Thu, 24 Mar 2016 14:11:34 +0200 Message-ID: <1458821494.7860.9.camel@linux.intel.com> References: <1458713384-25688-1-git-send-email-akash.goel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 270ED6E990 for ; Thu, 24 Mar 2016 12:11:04 +0000 (UTC) In-Reply-To: <1458713384-25688-1-git-send-email-akash.goel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: akash.goel@intel.com, intel-gfx@lists.freedesktop.org Cc: linux-mm@kvack.org, Sourab Gupta , Hugh Dickins List-Id: intel-gfx@lists.freedesktop.org T24ga2UsIDIwMTYtMDMtMjMgYXQgMTE6MzkgKzA1MzAsIGFrYXNoLmdvZWxAaW50ZWwuY29tIHdy b3RlOgo+IEZyb206IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IAo+ IFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIERyaXZlcnMgb3Igc2htZW0gZmlsZSBvd25l cnMgdG8gcmVnaXN0ZXIKPiBhIHNldCBvZiBjYWxsYmFja3MsIHdoaWNoIGNhbiBiZSBpbnZva2Vk IGZyb20gdGhlIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucwo+IG1ldGhvZHMgaW1wbGVtZW50ZWQg Ynkgc2htZW0uCj4gVGhpcyBhbGxvdyB0aGUgZmlsZSBvd25lcnMgdG8gaG9vayBpbnRvIHRoZSBz aG1lbSBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMKPiB0byBkbyBzb21lIGV4dHJhL2N1c3RvbSBv cGVyYXRpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZXMuCj4gCj4gVGhlIHByaXZh dGVfZGF0YSBmaWVsZCBvZiBhZGRyZXNzX3NwYWNlIHN0cnVjdCBpcyB1c2VkIHRvIHN0b3JlIHRo ZSBwb2ludGVyCj4gdG8gZHJpdmVyIHNwZWNpZmljIG9wcy4KPiBDdXJyZW50bHkgb25seSBvbmUg b3BzIGZpZWxkIGlzIGRlZmluZWQsIHdoaWNoIGlzIG1pZ3JhdGVwYWdlLCBidXQgY2FuIGJlCj4g ZXh0ZW5kZWQgb24gbmVlZCBiYXNpcy4KPiAKPiBUaGUgbmVlZCBmb3IgZHJpdmVyIHNwZWNpZmlj IG9wZXJhdGlvbnMgYXJpc2VzIHNpbmNlIHNvbWUgb2YgdGhlIG9wZXJhdGlvbnMKPiAobGlrZSBt aWdyYXRlcGFnZSkgbWF5IG5vdCBiZSBoYW5kbGVkIGNvbXBsZXRlbHkgd2l0aGluIHNobWVtLCBz byBhcyB0byBiZQo+IGVmZmVjdGl2ZSwgYW5kIHdvdWxkIG5lZWQgc29tZSBkcml2ZXIgc3BlY2lm aWMgaGFuZGxpbmcgYWxzby4KPiAKPiBTcGVjaWZpY2FsbHksIGk5MTUua28gd291bGQgbGlrZSB0 byBwYXJ0aWNpcGF0ZSBpbiBtaWdyYXRlcGFnZSgpLgo+IGk5MTUua28gdXNlcyBzaG1lbWZzIHRv IHByb3ZpZGUgc3dhcHBhYmxlIGJhY2tpbmcgc3RvcmFnZSBmb3IgaXRzIHVzZXIKPiBvYmplY3Rz LCBidXQgd2hlbiB0aG9zZSBvYmplY3RzIGFyZSBpbiB1c2UgYnkgdGhlIEdQVSBpdCBtdXN0IHBp biB0aGUgZW50aXJlCj4gb2JqZWN0IHVudGlsIHRoZSBHUFUgaXMgaWRsZS4gQXMgYSByZXN1bHQs IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkgY2FuIGJlCj4gYXJiaXRyYXJpbHkgd2l0aGRyYXduIGZy b20gcGFnZSBtaWdyYXRpb24sIHJlc3VsdGluZyBpbiBwcmVtYXR1cmUKPiBvdXQtb2YtbWVtb3J5 IGR1ZSB0byBmcmFnbWVudGF0aW9uLiBIb3dldmVyLCBpZiBpOTE1LmtvIGNhbiByZWNlaXZlIHRo ZQo+IG1pZ3JhdGVwYWdlKCkgcmVxdWVzdCwgaXQgY2FuIHRoZW4gZmx1c2ggdGhlIG9iamVjdCBm cm9tIHRoZSBHUFUsIHJlbW92ZQo+IGl0cyBwaW4gYW5kIHRodXMgZW5hYmxlIHRoZSBtaWdyYXRp b24uCj4gCj4gU2luY2UgR2Z4IGFsbG9jYXRpb25zIGFyZSBvbmUgb2YgdGhlIG1ham9yIGNvbnN1 bWVyIG9mIHN5c3RlbSBtZW1vcnksIGl0cwo+IGltcGVyYXRpdmUgdG8gaGF2ZSBzdWNoIGEgbWVj aGFuaXNtIHRvIGVmZmVjdGl2ZWx5IGRlYWwgd2l0aCBmcmFnbWVudGF0aW9uLgo+IEFuZCB0aGVy ZWZvcmUgdGhlIG5lZWQgZm9yIHN1Y2ggYSBwcm92aXNpb24gZm9yIGluaXRpYXRpbmcgZHJpdmVy IHNwZWNpZmljCj4gYWN0aW9ucyBkdXJpbmcgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLgo+IAo+ IENjOiBIdWdoIERpY2tpbnMgPGh1Z2hkQGdvb2dsZS5jb20+Cj4gQ2M6IGxpbnV4LW1tQGt2YWNr Lm9yZwo+IFNpZ25lZC1vZmYtYnk6IFNvdXJhYiBHdXB0YSA8c291cmFiLmd1cHRhQGludGVsLmNv bT4KPiBTaWduZWQtb2ZmLWJ5OiBBa2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4KPiAt LS0KPiDCoGluY2x1ZGUvbGludXgvc2htZW1fZnMuaCB8IDE3ICsrKysrKysrKysrKysrKysrCj4g wqBtbS9zaG1lbS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAxNyArKysrKysrKysr KysrKysrLQo+IMKgMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUv bGludXgvc2htZW1fZnMuaAo+IGluZGV4IDRkNDc4MGMuLjZjZmE3NmEgMTAwNjQ0Cj4gLS0tIGEv aW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5o Cj4gQEAgLTM0LDExICszNCwyOCBAQCBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7Cj4gwqAJc3RydWN0 IG1lbXBvbGljeSAqbXBvbDvCoMKgwqDCoMKgLyogZGVmYXVsdCBtZW1vcnkgcG9saWN5IGZvciBt YXBwaW5ncyAqLwo+IMKgfTsKPiDCoAo+ICtzdHJ1Y3Qgc2htZW1fZGV2X2luZm8gewo+ICsJdm9p ZCAqZGV2X3ByaXZhdGVfZGF0YTsKPiArCWludCAoKmRldl9taWdyYXRlcGFnZSkoc3RydWN0IGFk ZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCj4gKwkJCcKgwqDCoMKgwqDCoMKgc3RydWN0IHBhZ2UgKm5l d3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlLAo+ICsJCQnCoMKgwqDCoMKgwqDCoGVudW0gbWlncmF0 ZV9tb2RlIG1vZGUsIHZvaWQgKmRldl9wcml2X2RhdGEpOwoKT25lIG1pZ2h0IHdhbnQgdG8gaGF2 ZSBhIHNlcGFyYXRlIHNobWVtX2Rldl9vcGVyYXRpb25zIHN0cnVjdCBvcgpzaW1pbGFyLgoKPiAr fTsKPiArCj4gwqBzdGF0aWMgaW5saW5lIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICpTSE1FTV9J KHN0cnVjdCBpbm9kZSAqaW5vZGUpCj4gwqB7Cj4gwqAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9k ZSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHZmc19pbm9kZSk7Cj4gwqB9Cj4gwqAKPiArc3Rh dGljIGlubGluZSBpbnQgc2htZW1fc2V0X2RldmljZV9vcHMoc3RydWN0IGFkZHJlc3Nfc3BhY2Ug Km1hcHBpbmcsCj4gKwkJCQlzdHJ1Y3Qgc2htZW1fZGV2X2luZm8gKmluZm8pCj4gK3sKPiArCWlm IChtYXBwaW5nLT5wcml2YXRlX2RhdGEgIT0gTlVMTCkKPiArCQlyZXR1cm4gLUVFWElTVDsKPiAr CgpJIGRpZCBhIHF1aWNrIHJhbmRvbSBwZWVrIGFuZCBtb3N0IHNldCBmdW5jdGlvbnMgYXJlIGp1 c3Qgdm9pZCBhbmQKb3ZlcnJpZGUgZXhpc3RpbmcgZGF0YS4gSSdkIHN1Z2dlc3QgdGhlIHNhbWUu Cgo+ICsJbWFwcGluZy0+cHJpdmF0ZV9kYXRhID0gaW5mbzsKCkFsc28sIGRvZXNuJ3QgdGhpcyBr aW5kYSBzdGVhbCB0aGUgbWFwcGluZy0+cHJpdmF0ZV9kYXRhLCBtaWdodCB0aGF0IGJlCnVuZXhw ZWN0ZWQgZm9yIHRoZSB1c2VyPyBJIG5vdGljZSBjdXJyZW50bHkgaXQncyBub3QgYmVpbmcgdG91 Y2hlZCBhdAphbGwuCgo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gwqAvKgo+IMKgICogRnVuY3Rp b25zIGluIG1tL3NobWVtLmMgY2FsbGVkIGRpcmVjdGx5IGZyb20gZWxzZXdoZXJlOgo+IMKgICov Cj4gZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCj4gaW5kZXggNDQwZTJhNy4u Zjg2MjVjNCAxMDA2NDQKPiAtLS0gYS9tbS9zaG1lbS5jCj4gKysrIGIvbW0vc2htZW0uYwo+IEBA IC05NTIsNiArOTUyLDIxIEBAIHJlZGlydHk6Cj4gwqAJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiAr I2lmZGVmIENPTkZJR19NSUdSQVRJT04KPiArc3RhdGljIGludCBzaG1lbV9taWdyYXRlcGFnZShz dHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKPiArCQkJwqDCoMKgwqDCoHN0cnVjdCBwYWdl ICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKPiArCQkJwqDCoMKgwqDCoGVudW0gbWlncmF0 ZV9tb2RlIG1vZGUpCj4gK3sKPiArCXN0cnVjdCBzaG1lbV9kZXZfaW5mbyAqZGV2X2luZm8gPSBt YXBwaW5nLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsJaWYgKGRldl9pbmZvICYmIGRldl9pbmZvLT5k ZXZfbWlncmF0ZXBhZ2UpCj4gKwkJcmV0dXJuIGRldl9pbmZvLT5kZXZfbWlncmF0ZXBhZ2UobWFw cGluZywgbmV3cGFnZSwgcGFnZSwKPiArCQkJCW1vZGUsIGRldl9pbmZvLT5kZXZfcHJpdmF0ZV9k YXRhKTsKPiArCj4gKwlyZXR1cm4gbWlncmF0ZV9wYWdlKG1hcHBpbmcsIG5ld3BhZ2UsIHBhZ2Us IG1vZGUpOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiDCoCNpZmRlZiBDT05GSUdfTlVNQQo+IMKgI2lm ZGVmIENPTkZJR19UTVBGUwo+IMKgc3RhdGljIHZvaWQgc2htZW1fc2hvd19tcG9sKHN0cnVjdCBz ZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sKQo+IEBAIC0zMTY4LDcgKzMxODMs NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9h b3BzID0gewo+IMKgCS53cml0ZV9lbmQJPSBzaG1lbV93cml0ZV9lbmQsCj4gwqAjZW5kaWYKPiDC oCNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCj4gLQkubWlncmF0ZXBhZ2UJPSBtaWdyYXRlX3BhZ2Us Cj4gKwkubWlncmF0ZXBhZ2UJPSBzaG1lbV9taWdyYXRlcGFnZSwKPiDCoCNlbmRpZgo+IMKgCS5l cnJvcl9yZW1vdmVfcGFnZSA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX3BhZ2UsCj4gwqB9OwotLSAK Sm9vbmFzIExhaHRpbmVuCk9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVyCkludGVsIENvcnBv cmF0aW9uCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f169.google.com (mail-pf0-f169.google.com [209.85.192.169]) by kanga.kvack.org (Postfix) with ESMTP id 7D15B6B0005 for ; Thu, 24 Mar 2016 08:11:05 -0400 (EDT) Received: by mail-pf0-f169.google.com with SMTP id u190so55778890pfb.3 for ; Thu, 24 Mar 2016 05:11:05 -0700 (PDT) Received: from mga02.intel.com (mga02.intel.com. [134.134.136.20]) by mx.google.com with ESMTP id e72si11911159pfb.126.2016.03.24.05.11.04 for ; Thu, 24 Mar 2016 05:11:04 -0700 (PDT) Message-ID: <1458821494.7860.9.camel@linux.intel.com> Subject: Re: [Intel-gfx] [PATCH 1/2] shmem: Support for registration of Driver/file owner specific ops From: Joonas Lahtinen Date: Thu, 24 Mar 2016 14:11:34 +0200 In-Reply-To: <1458713384-25688-1-git-send-email-akash.goel@intel.com> References: <1458713384-25688-1-git-send-email-akash.goel@intel.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: owner-linux-mm@kvack.org List-ID: To: akash.goel@intel.com, intel-gfx@lists.freedesktop.org Cc: linux-mm@kvack.org, Sourab Gupta , Hugh Dickins On ke, 2016-03-23 at 11:39 +0530, akash.goel@intel.com wrote: > From: Chris Wilson > > This provides support for the Drivers or shmem file owners to register > a set of callbacks, which can be invoked from the address space operations > methods implemented by shmem. > This allow the file owners to hook into the shmem address space operations > to do some extra/custom operations in addition to the default ones. > > The private_data field of address_space struct is used to store the pointer > to driver specific ops. > Currently only one ops field is defined, which is migratepage, but can be > extended on need basis. > > The need for driver specific operations arises since some of the operations > (like migratepage) may not be handled completely within shmem, so as to be > effective, and would need some driver specific handling also. > > Specifically, i915.ko would like to participate in migratepage(). > i915.ko uses shmemfs to provide swappable backing storage for its user > objects, but when those objects are in use by the GPU it must pin the entire > object until the GPU is idle. As a result, large chunks of memory can be > arbitrarily withdrawn from page migration, resulting in premature > out-of-memory due to fragmentation. However, if i915.ko can receive the > migratepage() request, it can then flush the object from the GPU, remove > its pin and thus enable the migration. > > Since Gfx allocations are one of the major consumer of system memory, its > imperative to have such a mechanism to effectively deal with fragmentation. > And therefore the need for such a provision for initiating driver specific > actions during address space operations. > > Cc: Hugh Dickins > Cc: linux-mm@kvack.org > Signed-off-by: Sourab Gupta > Signed-off-by: Akash Goel > --- > A include/linux/shmem_fs.h | 17 +++++++++++++++++ > A mm/shmem.cA A A A A A A A A A A A A A A | 17 ++++++++++++++++- > A 2 files changed, 33 insertions(+), 1 deletion(-) > > diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h > index 4d4780c..6cfa76a 100644 > --- a/include/linux/shmem_fs.h > +++ b/include/linux/shmem_fs.h > @@ -34,11 +34,28 @@ struct shmem_sb_info { > A struct mempolicy *mpol;A A A A A /* default memory policy for mappings */ > A }; > A > +struct shmem_dev_info { > + void *dev_private_data; > + int (*dev_migratepage)(struct address_space *mapping, > + A A A A A A A struct page *newpage, struct page *page, > + A A A A A A A enum migrate_mode mode, void *dev_priv_data); One might want to have a separate shmem_dev_operations struct or similar. > +}; > + > A static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) > A { > A return container_of(inode, struct shmem_inode_info, vfs_inode); > A } > A > +static inline int shmem_set_device_ops(struct address_space *mapping, > + struct shmem_dev_info *info) > +{ > + if (mapping->private_data != NULL) > + return -EEXIST; > + I did a quick random peek and most set functions are just void and override existing data. I'd suggest the same. > + mapping->private_data = info; Also, doesn't this kinda steal the mapping->private_data, might that be unexpected for the user? I notice currently it's not being touched at all. > + return 0; > +} > + > A /* > A * Functions in mm/shmem.c called directly from elsewhere: > A */ > diff --git a/mm/shmem.c b/mm/shmem.c > index 440e2a7..f8625c4 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -952,6 +952,21 @@ redirty: > A return 0; > A } > A > +#ifdef CONFIG_MIGRATION > +static int shmem_migratepage(struct address_space *mapping, > + A A A A A struct page *newpage, struct page *page, > + A A A A A enum migrate_mode mode) > +{ > + struct shmem_dev_info *dev_info = mapping->private_data; > + > + if (dev_info && dev_info->dev_migratepage) > + return dev_info->dev_migratepage(mapping, newpage, page, > + mode, dev_info->dev_private_data); > + > + return migrate_page(mapping, newpage, page, mode); > +} > +#endif > + > A #ifdef CONFIG_NUMA > A #ifdef CONFIG_TMPFS > A static void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) > @@ -3168,7 +3183,7 @@ static const struct address_space_operations shmem_aops = { > A .write_end = shmem_write_end, > A #endif > A #ifdef CONFIG_MIGRATION > - .migratepage = migrate_page, > + .migratepage = shmem_migratepage, > A #endif > A .error_remove_page = generic_error_remove_page, > A }; -- Joonas Lahtinen Open Source Technology Center Intel Corporation -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org