Merge efb5973459 ("mm: fix folio_pte_batch() on XEN PV") into android16-6.12-lts
Steps on the way to 6.12.29 Change-Id: Iaeaedaa3b6ba8949ae47cce762a0d1494e0f80e1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -5,5 +5,5 @@ check-private-items = true
|
||||
disallowed-macros = [
|
||||
# The `clippy::dbg_macro` lint only works with `std::dbg!`, thus we simulate
|
||||
# it here, see: https://github.com/rust-lang/rust-clippy/issues/11303.
|
||||
{ path = "kernel::dbg", reason = "the `dbg!` macro is intended as a debugging tool" },
|
||||
{ path = "kernel::dbg", reason = "the `dbg!` macro is intended as a debugging tool", allow-invalid = true },
|
||||
]
|
||||
|
||||
@@ -624,7 +624,11 @@ void switch_mm_irqs_off(struct mm_struct *unused, struct mm_struct *next,
|
||||
|
||||
choose_new_asid(next, next_tlb_gen, &new_asid, &need_flush);
|
||||
|
||||
/* Let nmi_uaccess_okay() know that we're changing CR3. */
|
||||
/*
|
||||
* Indicate that CR3 is about to change. nmi_uaccess_okay()
|
||||
* and others are sensitive to the window where mm_cpumask(),
|
||||
* CR3 and cpu_tlbstate.loaded_mm are not all in sync.
|
||||
*/
|
||||
this_cpu_write(cpu_tlbstate.loaded_mm, LOADED_MM_SWITCHING);
|
||||
barrier();
|
||||
}
|
||||
@@ -895,8 +899,16 @@ done:
|
||||
|
||||
static bool should_flush_tlb(int cpu, void *data)
|
||||
{
|
||||
struct mm_struct *loaded_mm = per_cpu(cpu_tlbstate.loaded_mm, cpu);
|
||||
struct flush_tlb_info *info = data;
|
||||
|
||||
/*
|
||||
* Order the 'loaded_mm' and 'is_lazy' against their
|
||||
* write ordering in switch_mm_irqs_off(). Ensure
|
||||
* 'is_lazy' is at least as new as 'loaded_mm'.
|
||||
*/
|
||||
smp_rmb();
|
||||
|
||||
/* Lazy TLB will get flushed at the next context switch. */
|
||||
if (per_cpu(cpu_tlbstate_shared.is_lazy, cpu))
|
||||
return false;
|
||||
@@ -905,8 +917,15 @@ static bool should_flush_tlb(int cpu, void *data)
|
||||
if (!info->mm)
|
||||
return true;
|
||||
|
||||
/*
|
||||
* While switching, the remote CPU could have state from
|
||||
* either the prev or next mm. Assume the worst and flush.
|
||||
*/
|
||||
if (loaded_mm == LOADED_MM_SWITCHING)
|
||||
return true;
|
||||
|
||||
/* The target mm is loaded, and the CPU is not lazy. */
|
||||
if (per_cpu(cpu_tlbstate.loaded_mm, cpu) == info->mm)
|
||||
if (loaded_mm == info->mm)
|
||||
return true;
|
||||
|
||||
/* In cpumask, but not the loaded mm? Periodically remove by flushing. */
|
||||
|
||||
@@ -77,12 +77,13 @@
|
||||
* xbox d-pads should map to buttons, as is required for DDR pads
|
||||
* but we map them to axes when possible to simplify things
|
||||
*/
|
||||
#define MAP_DPAD_TO_BUTTONS (1 << 0)
|
||||
#define MAP_TRIGGERS_TO_BUTTONS (1 << 1)
|
||||
#define MAP_STICKS_TO_NULL (1 << 2)
|
||||
#define MAP_SELECT_BUTTON (1 << 3)
|
||||
#define MAP_PADDLES (1 << 4)
|
||||
#define MAP_PROFILE_BUTTON (1 << 5)
|
||||
#define MAP_DPAD_TO_BUTTONS BIT(0)
|
||||
#define MAP_TRIGGERS_TO_BUTTONS BIT(1)
|
||||
#define MAP_STICKS_TO_NULL BIT(2)
|
||||
#define MAP_SHARE_BUTTON BIT(3)
|
||||
#define MAP_PADDLES BIT(4)
|
||||
#define MAP_PROFILE_BUTTON BIT(5)
|
||||
#define MAP_SHARE_OFFSET BIT(6)
|
||||
|
||||
#define DANCEPAD_MAP_CONFIG (MAP_DPAD_TO_BUTTONS | \
|
||||
MAP_TRIGGERS_TO_BUTTONS | MAP_STICKS_TO_NULL)
|
||||
@@ -135,7 +136,7 @@ static const struct xpad_device {
|
||||
{ 0x03f0, 0x048D, "HyperX Clutch", 0, XTYPE_XBOX360 }, /* wireless */
|
||||
{ 0x03f0, 0x0495, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE },
|
||||
{ 0x03f0, 0x07A0, "HyperX Clutch Gladiate RGB", 0, XTYPE_XBOXONE },
|
||||
{ 0x03f0, 0x08B6, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE }, /* v2 */
|
||||
{ 0x03f0, 0x08B6, "HyperX Clutch Gladiate", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, /* v2 */
|
||||
{ 0x03f0, 0x09B4, "HyperX Clutch Tanto", 0, XTYPE_XBOXONE },
|
||||
{ 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
|
||||
{ 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
|
||||
@@ -159,7 +160,7 @@ static const struct xpad_device {
|
||||
{ 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
|
||||
{ 0x045e, 0x0b00, "Microsoft X-Box One Elite 2 pad", MAP_PADDLES, XTYPE_XBOXONE },
|
||||
{ 0x045e, 0x0b0a, "Microsoft X-Box Adaptive Controller", MAP_PROFILE_BUTTON, XTYPE_XBOXONE },
|
||||
{ 0x045e, 0x0b12, "Microsoft Xbox Series S|X Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE },
|
||||
{ 0x045e, 0x0b12, "Microsoft Xbox Series S|X Controller", MAP_SHARE_BUTTON | MAP_SHARE_OFFSET, XTYPE_XBOXONE },
|
||||
{ 0x046d, 0xc21d, "Logitech Gamepad F310", 0, XTYPE_XBOX360 },
|
||||
{ 0x046d, 0xc21e, "Logitech Gamepad F510", 0, XTYPE_XBOX360 },
|
||||
{ 0x046d, 0xc21f, "Logitech Gamepad F710", 0, XTYPE_XBOX360 },
|
||||
@@ -205,13 +206,13 @@ static const struct xpad_device {
|
||||
{ 0x0738, 0x9871, "Mad Catz Portable Drum", 0, XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xb726, "Mad Catz Xbox controller - MW2", 0, XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xb738, "Mad Catz MVC2TE Stick 2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xbeef, "Mad Catz JOYTECH NEO SE Advanced GamePad", XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xbeef, "Mad Catz JOYTECH NEO SE Advanced GamePad", 0, XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xcb02, "Saitek Cyborg Rumble Pad - PC/Xbox 360", 0, XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xcb03, "Saitek P3200 Rumble Pad - PC/Xbox 360", 0, XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xcb29, "Saitek Aviator Stick AV8R02", 0, XTYPE_XBOX360 },
|
||||
{ 0x0738, 0xf738, "Super SFIV FightStick TE S", 0, XTYPE_XBOX360 },
|
||||
{ 0x07ff, 0xffff, "Mad Catz GamePad", 0, XTYPE_XBOX360 },
|
||||
{ 0x0b05, 0x1a38, "ASUS ROG RAIKIRI", 0, XTYPE_XBOXONE },
|
||||
{ 0x0b05, 0x1a38, "ASUS ROG RAIKIRI", MAP_SHARE_BUTTON, XTYPE_XBOXONE },
|
||||
{ 0x0b05, 0x1abb, "ASUS ROG RAIKIRI PRO", 0, XTYPE_XBOXONE },
|
||||
{ 0x0c12, 0x0005, "Intec wireless", 0, XTYPE_XBOX },
|
||||
{ 0x0c12, 0x8801, "Nyko Xbox Controller", 0, XTYPE_XBOX },
|
||||
@@ -240,7 +241,7 @@ static const struct xpad_device {
|
||||
{ 0x0e6f, 0x0146, "Rock Candy Wired Controller for Xbox One", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x0147, "PDP Marvel Xbox One Controller", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x015c, "PDP Xbox One Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x015d, "PDP Mirror's Edge Official Wired Controller for Xbox One", XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x015d, "PDP Mirror's Edge Official Wired Controller for Xbox One", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x0161, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x0162, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x0163, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
|
||||
@@ -387,10 +388,11 @@ static const struct xpad_device {
|
||||
{ 0x2dc8, 0x3106, "8BitDo Ultimate Wireless / Pro 2 Wired Controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x2dc8, 0x3109, "8BitDo Ultimate Wireless Bluetooth", 0, XTYPE_XBOX360 },
|
||||
{ 0x2dc8, 0x310a, "8BitDo Ultimate 2C Wireless Controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x2dc8, 0x310b, "8BitDo Ultimate 2 Wireless Controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x2dc8, 0x6001, "8BitDo SN30 Pro", 0, XTYPE_XBOX360 },
|
||||
{ 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE },
|
||||
{ 0x2e24, 0x1688, "Hyperkin X91 X-Box One pad", 0, XTYPE_XBOXONE },
|
||||
{ 0x2e95, 0x0504, "SCUF Gaming Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE },
|
||||
{ 0x2e95, 0x0504, "SCUF Gaming Controller", MAP_SHARE_BUTTON, XTYPE_XBOXONE },
|
||||
{ 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 },
|
||||
{ 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 },
|
||||
{ 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 },
|
||||
@@ -1027,7 +1029,7 @@ static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned cha
|
||||
* The report format was gleaned from
|
||||
* https://github.com/kylelemons/xbox/blob/master/xbox.go
|
||||
*/
|
||||
static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
|
||||
static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data, u32 len)
|
||||
{
|
||||
struct input_dev *dev = xpad->dev;
|
||||
bool do_sync = false;
|
||||
@@ -1068,8 +1070,12 @@ static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char
|
||||
/* menu/view buttons */
|
||||
input_report_key(dev, BTN_START, data[4] & BIT(2));
|
||||
input_report_key(dev, BTN_SELECT, data[4] & BIT(3));
|
||||
if (xpad->mapping & MAP_SELECT_BUTTON)
|
||||
input_report_key(dev, KEY_RECORD, data[22] & BIT(0));
|
||||
if (xpad->mapping & MAP_SHARE_BUTTON) {
|
||||
if (xpad->mapping & MAP_SHARE_OFFSET)
|
||||
input_report_key(dev, KEY_RECORD, data[len - 26] & BIT(0));
|
||||
else
|
||||
input_report_key(dev, KEY_RECORD, data[len - 18] & BIT(0));
|
||||
}
|
||||
|
||||
/* buttons A,B,X,Y */
|
||||
input_report_key(dev, BTN_A, data[4] & BIT(4));
|
||||
@@ -1217,7 +1223,7 @@ static void xpad_irq_in(struct urb *urb)
|
||||
xpad360w_process_packet(xpad, 0, xpad->idata);
|
||||
break;
|
||||
case XTYPE_XBOXONE:
|
||||
xpadone_process_packet(xpad, 0, xpad->idata);
|
||||
xpadone_process_packet(xpad, 0, xpad->idata, urb->actual_length);
|
||||
break;
|
||||
default:
|
||||
xpad_process_packet(xpad, 0, xpad->idata);
|
||||
@@ -1974,7 +1980,7 @@ static int xpad_init_input(struct usb_xpad *xpad)
|
||||
xpad->xtype == XTYPE_XBOXONE) {
|
||||
for (i = 0; xpad360_btn[i] >= 0; i++)
|
||||
input_set_capability(input_dev, EV_KEY, xpad360_btn[i]);
|
||||
if (xpad->mapping & MAP_SELECT_BUTTON)
|
||||
if (xpad->mapping & MAP_SHARE_BUTTON)
|
||||
input_set_capability(input_dev, EV_KEY, KEY_RECORD);
|
||||
} else {
|
||||
for (i = 0; xpad_btn[i] >= 0; i++)
|
||||
|
||||
@@ -147,8 +147,8 @@ static void mtk_pmic_keys_lp_reset_setup(struct mtk_pmic_keys *keys,
|
||||
u32 value, mask;
|
||||
int error;
|
||||
|
||||
kregs_home = keys->keys[MTK_PMIC_HOMEKEY_INDEX].regs;
|
||||
kregs_pwr = keys->keys[MTK_PMIC_PWRKEY_INDEX].regs;
|
||||
kregs_home = ®s->keys_regs[MTK_PMIC_HOMEKEY_INDEX];
|
||||
kregs_pwr = ®s->keys_regs[MTK_PMIC_PWRKEY_INDEX];
|
||||
|
||||
error = of_property_read_u32(keys->dev->of_node, "power-off-time-sec",
|
||||
&long_press_debounce);
|
||||
|
||||
@@ -163,6 +163,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
|
||||
|
||||
static const char * const smbus_pnp_ids[] = {
|
||||
/* all of the topbuttonpad_pnp_ids are valid, we just add some extras */
|
||||
"DLL060d", /* Dell Precision M3800 */
|
||||
"LEN0048", /* X1 Carbon 3 */
|
||||
"LEN0046", /* X250 */
|
||||
"LEN0049", /* Yoga 11e */
|
||||
@@ -189,11 +190,15 @@ static const char * const smbus_pnp_ids[] = {
|
||||
"LEN2054", /* E480 */
|
||||
"LEN2055", /* E580 */
|
||||
"LEN2068", /* T14 Gen 1 */
|
||||
"SYN1221", /* TUXEDO InfinityBook Pro 14 v5 */
|
||||
"SYN3003", /* HP EliteBook 850 G1 */
|
||||
"SYN3015", /* HP EliteBook 840 G2 */
|
||||
"SYN3052", /* HP EliteBook 840 G4 */
|
||||
"SYN3221", /* HP 15-ay000 */
|
||||
"SYN323d", /* HP Spectre X360 13-w013dx */
|
||||
"SYN3257", /* HP Envy 13-ad105ng */
|
||||
"TOS01f6", /* Dynabook Portege X30L-G */
|
||||
"TOS0213", /* Dynabook Portege X30-D */
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -580,7 +580,7 @@ static int cyttsp5_power_control(struct cyttsp5 *ts, bool on)
|
||||
int rc;
|
||||
|
||||
SET_CMD_REPORT_TYPE(cmd[0], 0);
|
||||
SET_CMD_REPORT_ID(cmd[0], HID_POWER_SLEEP);
|
||||
SET_CMD_REPORT_ID(cmd[0], state);
|
||||
SET_CMD_OPCODE(cmd[1], HID_CMD_SET_POWER);
|
||||
|
||||
rc = cyttsp5_write(ts, HID_COMMAND_REG, cmd, sizeof(cmd));
|
||||
@@ -870,13 +870,16 @@ static int cyttsp5_probe(struct device *dev, struct regmap *regmap, int irq,
|
||||
ts->input->phys = ts->phys;
|
||||
input_set_drvdata(ts->input, ts);
|
||||
|
||||
/* Reset the gpio to be in a reset state */
|
||||
/* Assert gpio to be in a reset state */
|
||||
ts->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(ts->reset_gpio)) {
|
||||
error = PTR_ERR(ts->reset_gpio);
|
||||
dev_err(dev, "Failed to request reset gpio, error %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
fsleep(10); /* Ensure long-enough reset pulse (minimum 10us). */
|
||||
|
||||
gpiod_set_value_cansleep(ts->reset_gpio, 0);
|
||||
|
||||
/* Need a delay to have device up */
|
||||
|
||||
@@ -393,16 +393,14 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
|
||||
|
||||
bytes_available = ioread32(fifo->base_addr + XLLF_RLR_OFFSET);
|
||||
if (!bytes_available) {
|
||||
dev_err(fifo->dt_device, "received a packet of length 0 - fifo core will be reset\n");
|
||||
reset_ip_core(fifo);
|
||||
dev_err(fifo->dt_device, "received a packet of length 0\n");
|
||||
ret = -EIO;
|
||||
goto end_unlock;
|
||||
}
|
||||
|
||||
if (bytes_available > len) {
|
||||
dev_err(fifo->dt_device, "user read buffer too small (available bytes=%zu user buffer bytes=%zu) - fifo core will be reset\n",
|
||||
dev_err(fifo->dt_device, "user read buffer too small (available bytes=%zu user buffer bytes=%zu)\n",
|
||||
bytes_available, len);
|
||||
reset_ip_core(fifo);
|
||||
ret = -EINVAL;
|
||||
goto end_unlock;
|
||||
}
|
||||
@@ -411,8 +409,7 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
|
||||
/* this probably can't happen unless IP
|
||||
* registers were previously mishandled
|
||||
*/
|
||||
dev_err(fifo->dt_device, "received a packet that isn't word-aligned - fifo core will be reset\n");
|
||||
reset_ip_core(fifo);
|
||||
dev_err(fifo->dt_device, "received a packet that isn't word-aligned\n");
|
||||
ret = -EIO;
|
||||
goto end_unlock;
|
||||
}
|
||||
@@ -433,7 +430,6 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
|
||||
|
||||
if (copy_to_user(buf + copied * sizeof(u32), tmp_buf,
|
||||
copy * sizeof(u32))) {
|
||||
reset_ip_core(fifo);
|
||||
ret = -EFAULT;
|
||||
goto end_unlock;
|
||||
}
|
||||
@@ -542,7 +538,6 @@ static ssize_t axis_fifo_write(struct file *f, const char __user *buf,
|
||||
|
||||
if (copy_from_user(tmp_buf, buf + copied * sizeof(u32),
|
||||
copy * sizeof(u32))) {
|
||||
reset_ip_core(fifo);
|
||||
ret = -EFAULT;
|
||||
goto end_unlock;
|
||||
}
|
||||
@@ -775,9 +770,6 @@ static int axis_fifo_parse_dt(struct axis_fifo *fifo)
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* IP sets TDFV to fifo depth - 4 so we will do the same */
|
||||
fifo->tx_fifo_depth -= 4;
|
||||
|
||||
ret = get_dts_property(fifo, "xlnx,use-rx-data", &fifo->has_rx_fifo);
|
||||
if (ret) {
|
||||
dev_err(fifo->dt_device, "missing xlnx,use-rx-data property\n");
|
||||
|
||||
@@ -136,7 +136,7 @@ static ssize_t ad7816_store_mode(struct device *dev,
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct ad7816_chip_info *chip = iio_priv(indio_dev);
|
||||
|
||||
if (strcmp(buf, "full")) {
|
||||
if (strcmp(buf, "full") == 0) {
|
||||
gpiod_set_value(chip->rdwr_pin, 1);
|
||||
chip->mode = AD7816_FULL;
|
||||
} else {
|
||||
|
||||
@@ -1902,6 +1902,7 @@ static int bcm2835_mmal_probe(struct vchiq_device *device)
|
||||
__func__, ret);
|
||||
goto free_dev;
|
||||
}
|
||||
dev->v4l2_dev.dev = &device->dev;
|
||||
|
||||
/* setup v4l controls */
|
||||
ret = bcm2835_mmal_init_controls(dev, &dev->ctrl_handler);
|
||||
|
||||
@@ -134,6 +134,9 @@ config LD_CAN_USE_KEEP_IN_OVERLAY
|
||||
# https://github.com/llvm/llvm-project/pull/130661
|
||||
def_bool LD_IS_BFD || LLD_VERSION >= 210000
|
||||
|
||||
config RUSTC_HAS_UNNECESSARY_TRANSMUTES
|
||||
def_bool RUSTC_VERSION >= 108800
|
||||
|
||||
config PAHOLE_VERSION
|
||||
int
|
||||
default $(shell,$(srctree)/scripts/pahole-version.sh $(PAHOLE))
|
||||
|
||||
@@ -205,11 +205,9 @@ static inline int folio_pte_batch(struct folio *folio, unsigned long addr,
|
||||
pte_t *start_ptep, pte_t pte, int max_nr, fpb_t flags,
|
||||
bool *any_writable, bool *any_young, bool *any_dirty)
|
||||
{
|
||||
unsigned long folio_end_pfn = folio_pfn(folio) + folio_nr_pages(folio);
|
||||
const pte_t *end_ptep = start_ptep + max_nr;
|
||||
pte_t expected_pte, *ptep;
|
||||
bool writable, young, dirty;
|
||||
int nr;
|
||||
int nr, cur_nr;
|
||||
|
||||
if (any_writable)
|
||||
*any_writable = false;
|
||||
@@ -222,11 +220,15 @@ static inline int folio_pte_batch(struct folio *folio, unsigned long addr,
|
||||
VM_WARN_ON_FOLIO(!folio_test_large(folio) || max_nr < 1, folio);
|
||||
VM_WARN_ON_FOLIO(page_folio(pfn_to_page(pte_pfn(pte))) != folio, folio);
|
||||
|
||||
/* Limit max_nr to the actual remaining PFNs in the folio we could batch. */
|
||||
max_nr = min_t(unsigned long, max_nr,
|
||||
folio_pfn(folio) + folio_nr_pages(folio) - pte_pfn(pte));
|
||||
|
||||
nr = pte_batch_hint(start_ptep, pte);
|
||||
expected_pte = __pte_batch_clear_ignored(pte_advance_pfn(pte, nr), flags);
|
||||
ptep = start_ptep + nr;
|
||||
|
||||
while (ptep < end_ptep) {
|
||||
while (nr < max_nr) {
|
||||
pte = ptep_get(ptep);
|
||||
if (any_writable)
|
||||
writable = !!pte_write(pte);
|
||||
@@ -239,14 +241,6 @@ static inline int folio_pte_batch(struct folio *folio, unsigned long addr,
|
||||
if (!pte_same(pte, expected_pte))
|
||||
break;
|
||||
|
||||
/*
|
||||
* Stop immediately once we reached the end of the folio. In
|
||||
* corner cases the next PFN might fall into a different
|
||||
* folio.
|
||||
*/
|
||||
if (pte_pfn(pte) >= folio_end_pfn)
|
||||
break;
|
||||
|
||||
if (any_writable)
|
||||
*any_writable |= writable;
|
||||
if (any_young)
|
||||
@@ -254,12 +248,13 @@ static inline int folio_pte_batch(struct folio *folio, unsigned long addr,
|
||||
if (any_dirty)
|
||||
*any_dirty |= dirty;
|
||||
|
||||
nr = pte_batch_hint(ptep, pte);
|
||||
expected_pte = pte_advance_pfn(expected_pte, nr);
|
||||
ptep += nr;
|
||||
cur_nr = pte_batch_hint(ptep, pte);
|
||||
expected_pte = pte_advance_pfn(expected_pte, cur_nr);
|
||||
ptep += cur_nr;
|
||||
nr += cur_nr;
|
||||
}
|
||||
|
||||
return min(ptep - start_ptep, max_nr);
|
||||
return min(nr, max_nr);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::undocumented_unsafe_blocks)]
|
||||
#[cfg_attr(CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES, allow(unnecessary_transmutes))]
|
||||
mod bindings_raw {
|
||||
// Manual definition for blocklisted types.
|
||||
type __kernel_size_t = usize;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
unreachable_pub,
|
||||
unsafe_op_in_unsafe_fn
|
||||
)]
|
||||
#![cfg_attr(CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES, allow(unnecessary_transmutes))]
|
||||
|
||||
// Manual definition of blocklisted types.
|
||||
type __kernel_size_t = usize;
|
||||
|
||||
@@ -219,6 +219,7 @@ static bool is_rust_noreturn(const struct symbol *func)
|
||||
str_ends_with(func->name, "_4core9panicking19assert_failed_inner") ||
|
||||
str_ends_with(func->name, "_4core9panicking30panic_null_pointer_dereference") ||
|
||||
str_ends_with(func->name, "_4core9panicking36panic_misaligned_pointer_dereference") ||
|
||||
str_ends_with(func->name, "_7___rustc17rust_begin_unwind") ||
|
||||
strstr(func->name, "_4core9panicking13assert_failed") ||
|
||||
strstr(func->name, "_4core9panicking11panic_const24panic_const_") ||
|
||||
(strstr(func->name, "_4core5slice5index24slice_") &&
|
||||
|
||||
Reference in New Issue
Block a user